@pierre/diffs 1.5.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/README.md +4 -3
  2. package/dist/components/CodeView.d.ts +3 -2
  3. package/dist/components/CodeView.d.ts.map +1 -1
  4. package/dist/components/CodeView.js +24 -19
  5. package/dist/components/CodeView.js.map +1 -1
  6. package/dist/components/File.d.ts +31 -9
  7. package/dist/components/File.d.ts.map +1 -1
  8. package/dist/components/File.js +176 -90
  9. package/dist/components/File.js.map +1 -1
  10. package/dist/components/FileDiff.d.ts +32 -9
  11. package/dist/components/FileDiff.d.ts.map +1 -1
  12. package/dist/components/FileDiff.js +225 -131
  13. package/dist/components/FileDiff.js.map +1 -1
  14. package/dist/components/FileStream.d.ts +6 -4
  15. package/dist/components/FileStream.d.ts.map +1 -1
  16. package/dist/components/FileStream.js +49 -36
  17. package/dist/components/FileStream.js.map +1 -1
  18. package/dist/components/UnresolvedFile.d.ts +14 -4
  19. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  20. package/dist/components/UnresolvedFile.js +35 -16
  21. package/dist/components/UnresolvedFile.js.map +1 -1
  22. package/dist/components/VirtualizedFile.d.ts +3 -2
  23. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  24. package/dist/components/VirtualizedFile.js +28 -20
  25. package/dist/components/VirtualizedFile.js.map +1 -1
  26. package/dist/components/VirtualizedFileDiff.d.ts +3 -2
  27. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  28. package/dist/components/VirtualizedFileDiff.js +31 -24
  29. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  30. package/dist/constants.d.ts +4 -2
  31. package/dist/constants.d.ts.map +1 -1
  32. package/dist/constants.js +3 -1
  33. package/dist/constants.js.map +1 -1
  34. package/dist/editor/editor.d.ts +2 -1
  35. package/dist/editor/editor.d.ts.map +1 -1
  36. package/dist/editor/editor.js +5 -1
  37. package/dist/editor/editor.js.map +1 -1
  38. package/dist/editor/platform.d.ts +1 -1
  39. package/dist/editor/platform.js +5 -4
  40. package/dist/editor/platform.js.map +1 -1
  41. package/dist/editor/selection.d.ts +2 -2
  42. package/dist/editor/selection.d.ts.map +1 -1
  43. package/dist/editor/selection.js +31 -6
  44. package/dist/editor/selection.js.map +1 -1
  45. package/dist/editor/tokenizer.d.ts +6 -4
  46. package/dist/editor/tokenizer.d.ts.map +1 -1
  47. package/dist/editor/tokenizer.js +25 -470
  48. package/dist/editor/tokenizer.js.map +1 -1
  49. package/dist/highlighter/DiffsEditorTokenizer.d.ts +16 -0
  50. package/dist/highlighter/DiffsEditorTokenizer.d.ts.map +1 -0
  51. package/dist/highlighter/DiffsEditorTokenizer.js +0 -0
  52. package/dist/highlighter/DiffsHighlighter.d.ts +41 -0
  53. package/dist/highlighter/DiffsHighlighter.d.ts.map +1 -0
  54. package/dist/highlighter/DiffsHighlighter.js +39 -0
  55. package/dist/highlighter/DiffsHighlighter.js.map +1 -0
  56. package/dist/highlighter/backends/highlights.d.ts +26 -0
  57. package/dist/highlighter/backends/highlights.d.ts.map +1 -0
  58. package/dist/highlighter/backends/highlights.js +71 -0
  59. package/dist/highlighter/backends/highlights.js.map +1 -0
  60. package/dist/highlighter/backends/shiki.d.ts +27 -0
  61. package/dist/highlighter/backends/shiki.d.ts.map +1 -0
  62. package/dist/highlighter/backends/shiki.js +107 -0
  63. package/dist/highlighter/backends/shiki.js.map +1 -0
  64. package/dist/highlighter/highlighterType.d.ts +13 -0
  65. package/dist/highlighter/highlighterType.d.ts.map +1 -0
  66. package/dist/highlighter/highlighterType.js +32 -0
  67. package/dist/highlighter/highlighterType.js.map +1 -0
  68. package/dist/highlighter/highlights-editor.d.ts +24 -0
  69. package/dist/highlighter/highlights-editor.d.ts.map +1 -0
  70. package/dist/highlighter/highlights-editor.js +166 -0
  71. package/dist/highlighter/highlights-editor.js.map +1 -0
  72. package/dist/highlighter/highlights-stream.d.ts +20 -0
  73. package/dist/highlighter/highlights-stream.d.ts.map +1 -0
  74. package/dist/highlighter/highlights-stream.js +93 -0
  75. package/dist/highlighter/highlights-stream.js.map +1 -0
  76. package/dist/highlighter/languages/areLanguagesAttached.d.ts +2 -1
  77. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  78. package/dist/highlighter/languages/areLanguagesAttached.js +4 -6
  79. package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
  80. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +6 -1
  81. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  82. package/dist/highlighter/languages/attachResolvedLanguages.js +6 -11
  83. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  84. package/dist/highlighter/languages/constants.d.ts +1 -1
  85. package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -1
  86. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  87. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  88. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  89. package/dist/highlighter/languages/resolveLanguage.js +19 -16
  90. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  91. package/dist/highlighter/languages/resolveLanguages.d.ts +1 -1
  92. package/dist/highlighter/shared_highlighter.d.ts +24 -9
  93. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  94. package/dist/highlighter/shared_highlighter.js +59 -47
  95. package/dist/highlighter/shared_highlighter.js.map +1 -1
  96. package/dist/highlighter/shiki-editor.d.ts +25 -0
  97. package/dist/highlighter/shiki-editor.d.ts.map +1 -0
  98. package/dist/highlighter/shiki-editor.js +483 -0
  99. package/dist/highlighter/shiki-editor.js.map +1 -0
  100. package/dist/highlighter/shiki-stream.d.ts +20 -0
  101. package/dist/highlighter/shiki-stream.d.ts.map +1 -0
  102. package/dist/highlighter/shiki-stream.js +60 -0
  103. package/dist/highlighter/shiki-stream.js.map +1 -0
  104. package/dist/highlighter/stream-tokenizer.d.ts +40 -0
  105. package/dist/highlighter/stream-tokenizer.d.ts.map +1 -0
  106. package/dist/highlighter/stream-tokenizer.js +70 -0
  107. package/dist/highlighter/stream-tokenizer.js.map +1 -0
  108. package/dist/highlighter/themes/areThemesAttached.d.ts +3 -2
  109. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  110. package/dist/highlighter/themes/areThemesAttached.js +5 -4
  111. package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
  112. package/dist/highlighter/themes/attachResolvedThemes.d.ts +5 -2
  113. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  114. package/dist/highlighter/themes/attachResolvedThemes.js +4 -16
  115. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
  116. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +3 -1
  117. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  118. package/dist/highlighter/themes/cleanUpResolvedThemes.js +8 -5
  119. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
  120. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts +7 -0
  121. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts.map +1 -0
  122. package/dist/highlighter/themes/createCSSVariablesTheme.js +89 -0
  123. package/dist/highlighter/themes/createCSSVariablesTheme.js.map +1 -0
  124. package/dist/highlighter/themes/createCachedLoader.d.ts +5 -0
  125. package/dist/highlighter/themes/createCachedLoader.d.ts.map +1 -0
  126. package/dist/highlighter/themes/createCachedLoader.js +15 -0
  127. package/dist/highlighter/themes/createCachedLoader.js.map +1 -0
  128. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +3 -2
  129. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  130. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +4 -4
  131. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
  132. package/dist/highlighter/themes/getResolvedThemes.d.ts +3 -2
  133. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  134. package/dist/highlighter/themes/getResolvedThemes.js +4 -3
  135. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
  136. package/dist/highlighter/themes/hasResolvedThemes.d.ts +2 -2
  137. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  138. package/dist/highlighter/themes/hasResolvedThemes.js +4 -3
  139. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
  140. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  141. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +3 -3
  142. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
  143. package/dist/highlighter/themes/registerCustomTheme.d.ts +9 -4
  144. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  145. package/dist/highlighter/themes/registerCustomTheme.js +8 -16
  146. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
  147. package/dist/highlighter/themes/resolveTheme.d.ts +3 -2
  148. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  149. package/dist/highlighter/themes/resolveTheme.js +4 -7
  150. package/dist/highlighter/themes/resolveTheme.js.map +1 -1
  151. package/dist/highlighter/themes/resolveThemes.d.ts +3 -2
  152. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  153. package/dist/highlighter/themes/resolveThemes.js +4 -7
  154. package/dist/highlighter/themes/resolveThemes.js.map +1 -1
  155. package/dist/highlighter/themes/themeResolver.d.ts +10 -4
  156. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  157. package/dist/highlighter/themes/themeResolver.js +141 -2
  158. package/dist/highlighter/themes/themeResolver.js.map +1 -1
  159. package/dist/highlighter/themes/types.d.ts +23 -0
  160. package/dist/highlighter/themes/types.d.ts.map +1 -0
  161. package/dist/highlighter/themes/types.js +0 -0
  162. package/dist/highlighter/tokenizer-types.d.ts +35 -0
  163. package/dist/highlighter/tokenizer-types.d.ts.map +1 -0
  164. package/dist/highlighter/tokenizer-types.js +0 -0
  165. package/dist/highlighter/types.d.ts +55 -0
  166. package/dist/highlighter/types.d.ts.map +1 -0
  167. package/dist/highlighter/types.js +0 -0
  168. package/dist/index.d.ts +22 -13
  169. package/dist/index.js +21 -18
  170. package/dist/managers/InteractionManager.d.ts.map +1 -1
  171. package/dist/managers/InteractionManager.js +2 -2
  172. package/dist/managers/InteractionManager.js.map +1 -1
  173. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +9 -1
  174. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  175. package/dist/react/CodeView.d.ts +4 -3
  176. package/dist/react/CodeView.d.ts.map +1 -1
  177. package/dist/react/CodeView.js +47 -38
  178. package/dist/react/CodeView.js.map +1 -1
  179. package/dist/react/File.js +3 -3
  180. package/dist/react/File.js.map +1 -1
  181. package/dist/react/FileDiff.js +3 -3
  182. package/dist/react/FileDiff.js.map +1 -1
  183. package/dist/react/MultiFileDiff.js +2 -2
  184. package/dist/react/MultiFileDiff.js.map +1 -1
  185. package/dist/react/PatchDiff.js +3 -3
  186. package/dist/react/PatchDiff.js.map +1 -1
  187. package/dist/react/UnresolvedFile.js +2 -2
  188. package/dist/react/UnresolvedFile.js.map +1 -1
  189. package/dist/react/index.d.ts +9 -4
  190. package/dist/react/types.d.ts +4 -2
  191. package/dist/react/types.d.ts.map +1 -1
  192. package/dist/react/utils/renderDiffChildren.js +1 -1
  193. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  194. package/dist/react/utils/renderFileChildren.js +1 -1
  195. package/dist/react/utils/renderFileChildren.js.map +1 -1
  196. package/dist/react/utils/useFileDiffInstance.d.ts +1 -0
  197. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  198. package/dist/react/utils/useFileDiffInstance.js +29 -24
  199. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  200. package/dist/react/utils/useFileInstance.d.ts +2 -0
  201. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  202. package/dist/react/utils/useFileInstance.js +38 -28
  203. package/dist/react/utils/useFileInstance.js.map +1 -1
  204. package/dist/react/utils/useForceUpdate.d.ts +5 -0
  205. package/dist/react/utils/useForceUpdate.d.ts.map +1 -0
  206. package/dist/react/utils/useForceUpdate.js +27 -0
  207. package/dist/react/utils/useForceUpdate.js.map +1 -0
  208. package/dist/react/utils/useNextRenderData.d.ts +9 -0
  209. package/dist/react/utils/useNextRenderData.d.ts.map +1 -0
  210. package/dist/react/utils/useNextRenderData.js +9 -0
  211. package/dist/react/utils/useNextRenderData.js.map +1 -0
  212. package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -0
  213. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  214. package/dist/react/utils/useUnresolvedFileInstance.js +26 -11
  215. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  216. package/dist/renderers/DiffHunksRenderer.d.ts +4 -2
  217. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  218. package/dist/renderers/DiffHunksRenderer.js +82 -43
  219. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  220. package/dist/renderers/FileRenderer.d.ts +6 -2
  221. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  222. package/dist/renderers/FileRenderer.js +77 -43
  223. package/dist/renderers/FileRenderer.js.map +1 -1
  224. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  225. package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -1
  226. package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
  227. package/dist/shiki-stream/index.d.ts +3 -3
  228. package/dist/shiki-stream/index.js +1 -2
  229. package/dist/shiki-stream/stream.d.ts +4 -4
  230. package/dist/shiki-stream/stream.d.ts.map +1 -1
  231. package/dist/shiki-stream/stream.js +20 -9
  232. package/dist/shiki-stream/stream.js.map +1 -1
  233. package/dist/shiki-stream/types.d.ts +7 -38
  234. package/dist/shiki-stream/types.d.ts.map +1 -1
  235. package/dist/ssr/index.d.ts +7 -2
  236. package/dist/ssr/renderHTML.js +2 -2
  237. package/dist/ssr/renderHTML.js.map +1 -1
  238. package/dist/style.js +1 -1
  239. package/dist/style.js.map +1 -1
  240. package/dist/types.d.ts +20 -11
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/utils/canUseWASM.d.ts +13 -0
  243. package/dist/utils/canUseWASM.d.ts.map +1 -0
  244. package/dist/utils/canUseWASM.js +59 -0
  245. package/dist/utils/canUseWASM.js.map +1 -0
  246. package/dist/utils/createSpanNodeFromToken.d.ts +3 -2
  247. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  248. package/dist/utils/createSpanNodeFromToken.js +4 -5
  249. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  250. package/dist/utils/cssWrappers.d.ts.map +1 -1
  251. package/dist/utils/cssWrappers.js +12 -0
  252. package/dist/utils/cssWrappers.js.map +1 -1
  253. package/dist/utils/getCodeViewItemRenderData.d.ts +10 -0
  254. package/dist/utils/getCodeViewItemRenderData.d.ts.map +1 -0
  255. package/dist/utils/getCodeViewItemRenderData.js +19 -0
  256. package/dist/utils/getCodeViewItemRenderData.js.map +1 -0
  257. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  258. package/dist/utils/getHighlighterOptions.js +3 -2
  259. package/dist/utils/getHighlighterOptions.js.map +1 -1
  260. package/dist/utils/getHighlighterThemeStyles.d.ts +2 -1
  261. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  262. package/dist/utils/getHighlighterThemeStyles.js +13 -3
  263. package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
  264. package/dist/utils/getTokenOptions.d.ts +7 -0
  265. package/dist/utils/getTokenOptions.d.ts.map +1 -0
  266. package/dist/utils/getTokenOptions.js +16 -0
  267. package/dist/utils/getTokenOptions.js.map +1 -0
  268. package/dist/utils/hastToHtml.d.ts +10 -0
  269. package/dist/utils/hastToHtml.d.ts.map +1 -0
  270. package/dist/utils/hastToHtml.js +125 -0
  271. package/dist/utils/hastToHtml.js.map +1 -0
  272. package/dist/utils/hydratePartialDiff.js +4 -0
  273. package/dist/utils/hydratePartialDiff.js.map +1 -1
  274. package/dist/utils/parseDiffDecorations.d.ts +2 -1
  275. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  276. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  277. package/dist/utils/parseMergeConflictDiffFromFile.js +2 -0
  278. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
  279. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  280. package/dist/utils/parsePatchFiles.js +24 -4
  281. package/dist/utils/parsePatchFiles.js.map +1 -1
  282. package/dist/utils/renderDiffWithHighlighter.d.ts +3 -2
  283. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  284. package/dist/utils/renderDiffWithHighlighter.js +33 -48
  285. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  286. package/dist/utils/renderFileWithHighlighter.d.ts +3 -2
  287. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  288. package/dist/utils/renderFileWithHighlighter.js +10 -26
  289. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  290. package/dist/utils/renderTokenLines.d.ts +22 -0
  291. package/dist/utils/renderTokenLines.d.ts.map +1 -0
  292. package/dist/utils/renderTokenLines.js +250 -0
  293. package/dist/utils/renderTokenLines.js.map +1 -0
  294. package/dist/utils/resolvePreferredHighlighter.d.ts +13 -0
  295. package/dist/utils/resolvePreferredHighlighter.d.ts.map +1 -0
  296. package/dist/utils/resolvePreferredHighlighter.js +11 -0
  297. package/dist/utils/resolvePreferredHighlighter.js.map +1 -0
  298. package/dist/utils/resolveRegion.js +20 -10
  299. package/dist/utils/resolveRegion.js.map +1 -1
  300. package/dist/utils/setDeferredArrayItem.d.ts +5 -0
  301. package/dist/utils/setDeferredArrayItem.d.ts.map +1 -0
  302. package/dist/utils/setDeferredArrayItem.js +39 -0
  303. package/dist/utils/setDeferredArrayItem.js.map +1 -0
  304. package/dist/utils/tokenStyle.d.ts +11 -0
  305. package/dist/utils/tokenStyle.d.ts.map +1 -0
  306. package/dist/utils/tokenStyle.js +32 -0
  307. package/dist/utils/tokenStyle.js.map +1 -0
  308. package/dist/utils/tokensToHtml.d.ts +11 -0
  309. package/dist/utils/tokensToHtml.d.ts.map +1 -0
  310. package/dist/utils/tokensToHtml.js +48 -0
  311. package/dist/utils/tokensToHtml.js.map +1 -0
  312. package/dist/utils/updateDiffHunks.d.ts +2 -2
  313. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  314. package/dist/utils/updateDiffHunks.js +7 -3
  315. package/dist/utils/updateDiffHunks.js.map +1 -1
  316. package/dist/utils/wrapTokenFragments.js.map +1 -1
  317. package/dist/worker/WorkerPoolManager.d.ts +14 -2
  318. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  319. package/dist/worker/WorkerPoolManager.js +155 -67
  320. package/dist/worker/WorkerPoolManager.js.map +1 -1
  321. package/dist/worker/hastLinesTransport.d.ts +14 -0
  322. package/dist/worker/hastLinesTransport.d.ts.map +1 -0
  323. package/dist/worker/hastLinesTransport.js +156 -0
  324. package/dist/worker/hastLinesTransport.js.map +1 -0
  325. package/dist/worker/highlights-CpZm9DAR.js +317 -0
  326. package/dist/worker/highlights-CpZm9DAR.js.map +1 -0
  327. package/dist/worker/index.d.ts +1 -1
  328. package/dist/worker/shiki-Ci4cdHsM.js +697 -0
  329. package/dist/worker/shiki-Ci4cdHsM.js.map +1 -0
  330. package/dist/worker/stream-tokenizer-DK9xp5M5.js +427 -0
  331. package/dist/worker/stream-tokenizer-DK9xp5M5.js.map +1 -0
  332. package/dist/worker/types.d.ts +16 -3
  333. package/dist/worker/types.d.ts.map +1 -1
  334. package/dist/worker/worker-portable.js +41 -13337
  335. package/dist/worker/worker-portable.js.map +1 -1
  336. package/dist/worker/worker.js +681 -349
  337. package/dist/worker/worker.js.map +1 -1
  338. package/dist/worker/workerMessage.d.ts +24 -0
  339. package/dist/worker/workerMessage.d.ts.map +1 -0
  340. package/dist/worker/workerMessage.js +0 -0
  341. package/package.json +5 -3
  342. package/dist/highlighter/themes/constants.d.ts +0 -5
  343. package/dist/highlighter/themes/constants.d.ts.map +0 -1
  344. package/dist/highlighter/themes/constants.js +0 -6
  345. package/dist/highlighter/themes/constants.js.map +0 -1
  346. package/dist/highlighter/themes/themeResolution.d.ts +0 -7
  347. package/dist/highlighter/themes/themeResolution.d.ts.map +0 -1
  348. package/dist/highlighter/themes/themeResolution.js +0 -21
  349. package/dist/highlighter/themes/themeResolution.js.map +0 -1
  350. package/dist/shiki-stream/tokenizer.d.ts +0 -23
  351. package/dist/shiki-stream/tokenizer.d.ts.map +0 -1
  352. package/dist/shiki-stream/tokenizer.js +0 -72
  353. package/dist/shiki-stream/tokenizer.js.map +0 -1
  354. package/dist/utils/createTransformerWithState.d.ts +0 -12
  355. package/dist/utils/createTransformerWithState.d.ts.map +0 -1
  356. package/dist/utils/createTransformerWithState.js +0 -89
  357. package/dist/utils/createTransformerWithState.js.map +0 -1
  358. package/dist/worker/wasm-B9ZqxnKj.js +0 -8
  359. package/dist/worker/wasm-B9ZqxnKj.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"wrapTokenFragments.js","names":[],"sources":["../../src/utils/wrapTokenFragments.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\n\nimport { createHastElement } from './hast_utils';\n\nconst NO_TOKEN: unique symbol = Symbol('no-token');\nconst MULTIPLE_TOKENS: unique symbol = Symbol('multiple-tokens');\n\ntype TokenFragmentState = number | typeof NO_TOKEN | typeof MULTIPLE_TOKENS;\n\n// Walk a rendered line and add a single outer token wrapper around all\n// fragments that still belong to the same original Shiki token.\nexport function wrapTokenFragments(container: HASTElement): TokenFragmentState {\n const ownTokenChar = getTokenChar(container);\n if (ownTokenChar != null) {\n return ownTokenChar;\n }\n\n let containerTokenState: TokenFragmentState = NO_TOKEN;\n const wrappedChildren: ElementContent[] = [];\n let currentTokenChildren: ElementContent[] = [];\n let currentTokenChar: number | undefined;\n\n const flushTokenChildren = () => {\n if (currentTokenChildren.length === 0 || currentTokenChar == null) {\n currentTokenChildren = [];\n currentTokenChar = undefined;\n return;\n }\n\n if (currentTokenChildren.length === 1) {\n const child = currentTokenChildren[0];\n if (child?.type === 'element') {\n setTokenChar(child, currentTokenChar);\n for (const grandChild of child.children) {\n stripTokenChar(grandChild);\n }\n } else {\n stripTokenChar(child);\n }\n wrappedChildren.push(child);\n currentTokenChildren = [];\n currentTokenChar = undefined;\n return;\n }\n\n for (const child of currentTokenChildren) {\n stripTokenChar(child);\n }\n\n wrappedChildren.push(\n createHastElement({\n tagName: 'span',\n properties: { 'data-char': currentTokenChar },\n children: currentTokenChildren,\n })\n );\n\n currentTokenChildren = [];\n currentTokenChar = undefined;\n };\n\n const mergeContainerTokenState = (childTokenState: TokenFragmentState) => {\n if (childTokenState === NO_TOKEN) {\n return;\n }\n if (childTokenState === MULTIPLE_TOKENS) {\n containerTokenState = MULTIPLE_TOKENS;\n return;\n }\n if (containerTokenState === NO_TOKEN) {\n containerTokenState = childTokenState;\n return;\n }\n if (containerTokenState !== childTokenState) {\n containerTokenState = MULTIPLE_TOKENS;\n }\n };\n\n for (const child of container.children) {\n const childTokenState: TokenFragmentState =\n child.type === 'element' ? wrapTokenFragments(child) : NO_TOKEN;\n mergeContainerTokenState(childTokenState);\n\n if (typeof childTokenState !== 'number') {\n flushTokenChildren();\n wrappedChildren.push(child);\n continue;\n }\n\n if (currentTokenChar != null && currentTokenChar !== childTokenState) {\n flushTokenChildren();\n }\n\n currentTokenChar ??= childTokenState;\n currentTokenChildren.push(child);\n }\n\n flushTokenChildren();\n container.children = wrappedChildren;\n return containerTokenState;\n}\n\nfunction getTokenChar(node: HASTElement): number | undefined {\n const value = node.properties['data-char'];\n if (typeof value === 'number') {\n return value;\n }\n return undefined;\n}\n\nfunction stripTokenChar(node: ElementContent): void {\n if (node.type !== 'element') return;\n node.properties['data-char'] = undefined;\n for (const child of node.children) {\n stripTokenChar(child);\n }\n}\n\nfunction setTokenChar(node: HASTElement, char: number): void {\n node.properties['data-char'] = char;\n}\n"],"mappings":";;AAIA,MAAM,WAA0B,OAAO,UAAU;AACjD,MAAM,kBAAiC,OAAO,iBAAiB;AAM/D,SAAgB,mBAAmB,WAA4C;CAC7E,MAAM,eAAe,aAAa,SAAS;CAC3C,IAAI,gBAAgB,MAClB,OAAO;CAGT,IAAI,sBAA0C;CAC9C,MAAM,kBAAoC,CAAC;CAC3C,IAAI,uBAAyC,CAAC;CAC9C,IAAI;CAEJ,MAAM,2BAA2B;EAC/B,IAAI,qBAAqB,WAAW,KAAK,oBAAoB,MAAM;GACjE,uBAAuB,CAAC;GACxB,mBAAmB,KAAA;GACnB;EACF;EAEA,IAAI,qBAAqB,WAAW,GAAG;GACrC,MAAM,QAAQ,qBAAqB;GACnC,IAAI,OAAO,SAAS,WAAW;IAC7B,aAAa,OAAO,gBAAgB;IACpC,KAAK,MAAM,cAAc,MAAM,UAC7B,eAAe,UAAU;GAE7B,OACE,eAAe,KAAK;GAEtB,gBAAgB,KAAK,KAAK;GAC1B,uBAAuB,CAAC;GACxB,mBAAmB,KAAA;GACnB;EACF;EAEA,KAAK,MAAM,SAAS,sBAClB,eAAe,KAAK;EAGtB,gBAAgB,KACd,kBAAkB;GAChB,SAAS;GACT,YAAY,EAAE,aAAa,iBAAiB;GAC5C,UAAU;EACZ,CAAC,CACH;EAEA,uBAAuB,CAAC;EACxB,mBAAmB,KAAA;CACrB;CAEA,MAAM,4BAA4B,oBAAwC;EACxE,IAAI,oBAAoB,UACtB;EAEF,IAAI,oBAAoB,iBAAiB;GACvC,sBAAsB;GACtB;EACF;EACA,IAAI,wBAAwB,UAAU;GACpC,sBAAsB;GACtB;EACF;EACA,IAAI,wBAAwB,iBAC1B,sBAAsB;CAE1B;CAEA,KAAK,MAAM,SAAS,UAAU,UAAU;EACtC,MAAM,kBACJ,MAAM,SAAS,YAAY,mBAAmB,KAAK,IAAI;EACzD,yBAAyB,eAAe;EAExC,IAAI,OAAO,oBAAoB,UAAU;GACvC,mBAAmB;GACnB,gBAAgB,KAAK,KAAK;GAC1B;EACF;EAEA,IAAI,oBAAoB,QAAQ,qBAAqB,iBACnD,mBAAmB;EAGrB,qBAAqB;EACrB,qBAAqB,KAAK,KAAK;CACjC;CAEA,mBAAmB;CACnB,UAAU,WAAW;CACrB,OAAO;AACT;AAEA,SAAS,aAAa,MAAuC;CAC3D,MAAM,QAAQ,KAAK,WAAW;CAC9B,IAAI,OAAO,UAAU,UACnB,OAAO;AAGX;AAEA,SAAS,eAAe,MAA4B;CAClD,IAAI,KAAK,SAAS,WAAW;CAC7B,KAAK,WAAW,eAAe,KAAA;CAC/B,KAAK,MAAM,SAAS,KAAK,UACvB,eAAe,KAAK;AAExB;AAEA,SAAS,aAAa,MAAmB,MAAoB;CAC3D,KAAK,WAAW,eAAe;AACjC"}
1
+ {"version":3,"file":"wrapTokenFragments.js","names":[],"sources":["../../src/utils/wrapTokenFragments.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\n\nimport { createHastElement } from './hast_utils';\n\nconst NO_TOKEN: unique symbol = Symbol('no-token');\nconst MULTIPLE_TOKENS: unique symbol = Symbol('multiple-tokens');\n\ntype TokenFragmentState = number | typeof NO_TOKEN | typeof MULTIPLE_TOKENS;\n\n// Walk a rendered line and add a single outer token wrapper around all\n// fragments that still belong to the same original syntax token.\nexport function wrapTokenFragments(container: HASTElement): TokenFragmentState {\n const ownTokenChar = getTokenChar(container);\n if (ownTokenChar != null) {\n return ownTokenChar;\n }\n\n let containerTokenState: TokenFragmentState = NO_TOKEN;\n const wrappedChildren: ElementContent[] = [];\n let currentTokenChildren: ElementContent[] = [];\n let currentTokenChar: number | undefined;\n\n const flushTokenChildren = () => {\n if (currentTokenChildren.length === 0 || currentTokenChar == null) {\n currentTokenChildren = [];\n currentTokenChar = undefined;\n return;\n }\n\n if (currentTokenChildren.length === 1) {\n const child = currentTokenChildren[0];\n if (child?.type === 'element') {\n setTokenChar(child, currentTokenChar);\n for (const grandChild of child.children) {\n stripTokenChar(grandChild);\n }\n } else {\n stripTokenChar(child);\n }\n wrappedChildren.push(child);\n currentTokenChildren = [];\n currentTokenChar = undefined;\n return;\n }\n\n for (const child of currentTokenChildren) {\n stripTokenChar(child);\n }\n\n wrappedChildren.push(\n createHastElement({\n tagName: 'span',\n properties: { 'data-char': currentTokenChar },\n children: currentTokenChildren,\n })\n );\n\n currentTokenChildren = [];\n currentTokenChar = undefined;\n };\n\n const mergeContainerTokenState = (childTokenState: TokenFragmentState) => {\n if (childTokenState === NO_TOKEN) {\n return;\n }\n if (childTokenState === MULTIPLE_TOKENS) {\n containerTokenState = MULTIPLE_TOKENS;\n return;\n }\n if (containerTokenState === NO_TOKEN) {\n containerTokenState = childTokenState;\n return;\n }\n if (containerTokenState !== childTokenState) {\n containerTokenState = MULTIPLE_TOKENS;\n }\n };\n\n for (const child of container.children) {\n const childTokenState: TokenFragmentState =\n child.type === 'element' ? wrapTokenFragments(child) : NO_TOKEN;\n mergeContainerTokenState(childTokenState);\n\n if (typeof childTokenState !== 'number') {\n flushTokenChildren();\n wrappedChildren.push(child);\n continue;\n }\n\n if (currentTokenChar != null && currentTokenChar !== childTokenState) {\n flushTokenChildren();\n }\n\n currentTokenChar ??= childTokenState;\n currentTokenChildren.push(child);\n }\n\n flushTokenChildren();\n container.children = wrappedChildren;\n return containerTokenState;\n}\n\nfunction getTokenChar(node: HASTElement): number | undefined {\n const value = node.properties['data-char'];\n if (typeof value === 'number') {\n return value;\n }\n return undefined;\n}\n\nfunction stripTokenChar(node: ElementContent): void {\n if (node.type !== 'element') return;\n node.properties['data-char'] = undefined;\n for (const child of node.children) {\n stripTokenChar(child);\n }\n}\n\nfunction setTokenChar(node: HASTElement, char: number): void {\n node.properties['data-char'] = char;\n}\n"],"mappings":";;AAIA,MAAM,WAA0B,OAAO,UAAU;AACjD,MAAM,kBAAiC,OAAO,iBAAiB;AAM/D,SAAgB,mBAAmB,WAA4C;CAC7E,MAAM,eAAe,aAAa,SAAS;CAC3C,IAAI,gBAAgB,MAClB,OAAO;CAGT,IAAI,sBAA0C;CAC9C,MAAM,kBAAoC,CAAC;CAC3C,IAAI,uBAAyC,CAAC;CAC9C,IAAI;CAEJ,MAAM,2BAA2B;EAC/B,IAAI,qBAAqB,WAAW,KAAK,oBAAoB,MAAM;GACjE,uBAAuB,CAAC;GACxB,mBAAmB,KAAA;GACnB;EACF;EAEA,IAAI,qBAAqB,WAAW,GAAG;GACrC,MAAM,QAAQ,qBAAqB;GACnC,IAAI,OAAO,SAAS,WAAW;IAC7B,aAAa,OAAO,gBAAgB;IACpC,KAAK,MAAM,cAAc,MAAM,UAC7B,eAAe,UAAU;GAE7B,OACE,eAAe,KAAK;GAEtB,gBAAgB,KAAK,KAAK;GAC1B,uBAAuB,CAAC;GACxB,mBAAmB,KAAA;GACnB;EACF;EAEA,KAAK,MAAM,SAAS,sBAClB,eAAe,KAAK;EAGtB,gBAAgB,KACd,kBAAkB;GAChB,SAAS;GACT,YAAY,EAAE,aAAa,iBAAiB;GAC5C,UAAU;EACZ,CAAC,CACH;EAEA,uBAAuB,CAAC;EACxB,mBAAmB,KAAA;CACrB;CAEA,MAAM,4BAA4B,oBAAwC;EACxE,IAAI,oBAAoB,UACtB;EAEF,IAAI,oBAAoB,iBAAiB;GACvC,sBAAsB;GACtB;EACF;EACA,IAAI,wBAAwB,UAAU;GACpC,sBAAsB;GACtB;EACF;EACA,IAAI,wBAAwB,iBAC1B,sBAAsB;CAE1B;CAEA,KAAK,MAAM,SAAS,UAAU,UAAU;EACtC,MAAM,kBACJ,MAAM,SAAS,YAAY,mBAAmB,KAAK,IAAI;EACzD,yBAAyB,eAAe;EAExC,IAAI,OAAO,oBAAoB,UAAU;GACvC,mBAAmB;GACnB,gBAAgB,KAAK,KAAK;GAC1B;EACF;EAEA,IAAI,oBAAoB,QAAQ,qBAAqB,iBACnD,mBAAmB;EAGrB,qBAAqB;EACrB,qBAAqB,KAAK,KAAK;CACjC;CAEA,mBAAmB;CACnB,UAAU,WAAW;CACrB,OAAO;AACT;AAEA,SAAS,aAAa,MAAuC;CAC3D,MAAM,QAAQ,KAAK,WAAW;CAC9B,IAAI,OAAO,UAAU,UACnB,OAAO;AAGX;AAEA,SAAS,eAAe,MAA4B;CAClD,IAAI,KAAK,SAAS,WAAW;CAC7B,KAAK,WAAW,eAAe,KAAA;CAC/B,KAAK,MAAM,SAAS,KAAK,UACvB,eAAe,KAAK;AAExB;AAEA,SAAS,aAAa,MAAmB,MAAoB;CAC3D,KAAK,WAAW,eAAe;AACjC"}
@@ -1,5 +1,5 @@
1
- import { FileContents, FileDiffMetadata, HighlighterTypes, HunkExpansionRegion, RenderDiffOptions, RenderDiffResult, RenderFileOptions, RenderFileResult, SupportedLanguages, ThemedDiffResult, ThemedFileResult } from "../types.js";
2
1
  import { DiffRendererInstance, FileRendererInstance, WorkerInitializationRenderOptions, WorkerPoolOptions, WorkerRenderingOptions, WorkerStats } from "./types.js";
2
+ import { FileContents, FileDiffMetadata, HighlighterTypes, HunkExpansionRegion, RenderDiffOptions, RenderDiffResult, RenderFileOptions, RenderFileResult, SupportedLanguages, ThemedDiffResult, ThemedFileResult } from "../types.js";
3
3
  import { LRUMap } from "lru_map";
4
4
  //#region src/worker/WorkerPoolManager.d.ts
5
5
  interface GetCachesResult {
@@ -12,7 +12,6 @@ interface ThemeSubscriber {
12
12
  type RenderTaskInstance = FileRendererInstance | DiffRendererInstance;
13
13
  declare class WorkerPoolManager {
14
14
  private options;
15
- private highlighter;
16
15
  private readonly preferredHighlighter;
17
16
  private renderOptions;
18
17
  private renderOptionsRequestVersion;
@@ -27,6 +26,7 @@ declare class WorkerPoolManager {
27
26
  private nextRequestId;
28
27
  private themeSubscribers;
29
28
  private workersFailed;
29
+ private terminated;
30
30
  private statSubscribers;
31
31
  private fileCache;
32
32
  private diffCache;
@@ -34,8 +34,16 @@ declare class WorkerPoolManager {
34
34
  private lifecycleGeneration;
35
35
  constructor(options: WorkerPoolOptions, { langs, theme, useTokenTransformer, lineDiffType, maxLineDiffLength, tokenizeMaxLineLength, preferredHighlighter }: WorkerInitializationRenderOptions);
36
36
  isWorkingPool(): boolean;
37
+ /**
38
+ * Whether a file or diff fits within `mainThreadMaxCharacters`, so it
39
+ * highlights on the main thread instead of a worker. Files count `contents`;
40
+ * diffs count both sides.
41
+ */
42
+ shouldHighlightOnMainThread(fileOrDiff: FileContents | FileDiffMetadata): boolean;
37
43
  getFileResultCache(file: FileContents): RenderFileResult | undefined;
38
44
  getDiffResultCache(diff: FileDiffMetadata): RenderDiffResult | undefined;
45
+ setFileResultCache(cacheKey: string | undefined, { result, options }: RenderFileResult): boolean;
46
+ setDiffResultCache(cacheKey: string | undefined, { result, options }: RenderDiffResult): boolean;
39
47
  inspectCaches(): GetCachesResult;
40
48
  evictFileFromCache(cacheKey: string): boolean;
41
49
  evictDiffFromCache(cacheKey: string): boolean;
@@ -52,6 +60,7 @@ declare class WorkerPoolManager {
52
60
  cleanUpTasks(instance: RenderTaskInstance): void;
53
61
  isInitialized(): boolean;
54
62
  initialize(languages?: SupportedLanguages[]): Promise<void>;
63
+ private loadSharedHighlighter;
55
64
  private initializeWorkers;
56
65
  /**
57
66
  * Pass worker errors to onWorkerError, or log them if no callback is set.
@@ -65,10 +74,13 @@ declare class WorkerPoolManager {
65
74
  private drainQueue;
66
75
  highlightFileAST(instance: FileRendererInstance, file: FileContents): void;
67
76
  primeFileHighlightCache(file: FileContents): Promise<void>;
77
+ private shouldPrimeFileHighlightCache;
68
78
  private getOrCreateFileHighlightCacheTask;
69
79
  getPlainFileAST(file: FileContents, startingLine: number, totalLines: number, lines?: string[]): ThemedFileResult | undefined;
70
80
  highlightDiffAST(instance: DiffRendererInstance, diff: FileDiffMetadata): void;
71
81
  primeDiffHighlightCache(diff: FileDiffMetadata): Promise<void>;
82
+ private shouldPrimeDiffHighlightCache;
83
+ private primeHighlightCacheOnMainThread;
72
84
  private getOrCreateDiffHighlightCacheTask;
73
85
  getPlainDiffAST(diff: FileDiffMetadata, startingLine: number, totalLines: number, expandedHunks?: Map<number, HunkExpansionRegion> | true, collapsedContextThreshold?: number): ThemedDiffResult | undefined;
74
86
  terminate(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"WorkerPoolManager.d.ts","names":[],"sources":["../../src/worker/WorkerPoolManager.ts"],"mappings":";;;;UA0EU;EACR,WAAW,eAAe;EAC1B,WAAW,eAAe;;UAYlB;EACR;;KAKG,qBAAqB,uBAAuB;cAEpC;UAkCD;UAjCF;mBACS;UACT;UACA;UACA;UACA;UACA;UAEA;UACA;UAIA;UAGA;UACA;UAKA;UACA;UACA;UACA;UACA;UACA;UACA;UAEA;EAER,YACU,SAAS,qBAEf,OACA,OACA,qBACA,cACA,mBACA,uBACA,wBACC;EAeE;EAIA,mBAAmB,MAAM,eAAe;EAMxC,mBACL,MAAM,mBACL;EAMI,iBAAiB;EAKjB,mBAAmB;EAQnB,mBAAmB;EAQpB,mBACJ,OACA,qBACA,cACA,mBACA,yBACC,QAAQ,0BAA0B;EA4E9B,2BAA2B;EAI3B,wBAAwB;EAMxB,wBAAwB;UAIjB;EA6CP,wBAAwB,UAAU;EASlC,0BAA0B,UAAU;EAKpC,uBACL,WAAW,OAAO;UASZ;UAKA;EAWD,aAAa,UAAU;EAkBvB;EAIM,WAAW,YAAW,uBAA4B;UAqFjD;;;;;;;;;UA8FN;UA8BA;EA2BD,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,eAAe;UAe5C;EAgCD,gBACL,MAAM,cACN,sBACA,oBACA,mBACC;EAaI,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,mBAAmB;UAehD;EAgCD,gBACL,MAAM,kBACN,sBACA,oBACA,gBAAgB,YAAY,6BAC5B,qCACC;EAYI;UAqBC;UAIA;UAUA;UAWA;EAOD,YAAY;UAwBX;UA+DA;UA0CA;UAcM;UAyDN;UAuGA;UACA;UAMA;UAYA;UAqBA;UAmCA;UAeA;UAUA;UA8BA;UAOA;UAOA;UAWA;UASA;UAgBA;UAeA;UAWA;UAUA;UAOA;UAMA;UAOA;UAOA;UAkBA;UAQA;UASA;UAMA;UAQA;UAYA;UAYA;UAQA;UAiBA;UAiBA;UAKA;UAIC;UAWD"}
1
+ {"version":3,"file":"WorkerPoolManager.d.ts","names":[],"sources":["../../src/worker/WorkerPoolManager.ts"],"mappings":";;;;UAmFU;EACR,WAAW,eAAe;EAC1B,WAAW,eAAe;;UAYlB;EACR;;KAKG,qBAAqB,uBAAuB;cAEpC;UAkCD;mBAjCO;UACT;UACA;UACA;UACA;UACA;UAEA;UACA;UAIA;UAGA;UACA;UAKA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UAEA;EAER,YACU,SAAS,qBAEf,OACA,OACA,qBACA,cACA,mBACA,uBACA,wBACC;EAeE;;;;;;EASA,4BACL,YAAY,eAAe;EAUtB,mBAAmB,MAAM,eAAe;EAMxC,mBACL,MAAM,mBACL;EAQI,mBACL,gCACE,QAAQ,WAAW;EAehB,mBACL,gCACE,QAAQ,WAAW;EAahB,iBAAiB;EAKjB,mBAAmB;EAQnB,mBAAmB;EAQpB,mBACJ,OACA,qBACA,cACA,mBACA,yBACC,QAAQ,0BAA0B;EAmF9B,2BAA2B;EAI3B,wBAAwB;EAMxB,wBAAwB;UAIjB;EA6CP,wBAAwB,UAAU;EASlC,0BAA0B,UAAU;EAKpC,uBACL,WAAW,OAAO;UASZ;UAKA;EAWD,aAAa,UAAU;EAkBvB;EAIM,WAAW,YAAW,uBAA4B;UAwFjD;UAiBA;;;;;;;;;UAgGN;UA8BA;EA2BD,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,eAAe;UAgC5C;UAkBA;EA2BD,gBACL,MAAM,cACN,sBACA,oBACA,mBACC;EAgBI,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,mBAAmB;UAgChD;UAuBA;UA0BA;EA2BD,gBACL,MAAM,kBACN,sBACA,oBACA,gBAAgB,YAAY,6BAC5B,qCACC;EAiBI;UAqBC;UAIA;UAUA;UAWA;EAOD,YAAY;UAwBX;UA+DA;UA0CA;UAcM;UA0DN;UAsHA;UACA;UAMA;UAYA;UAqBA;UAmCA;UAeA;UAUA;UA8BA;UAOA;UAOA;UAWA;UASA;UAgBA;UAeA;UAWA;UAUA;UAOA;UAMA;UAOA;UAOA;UAkBA;UAQA;UASA;UAMA;UAQA;UAYA;UAYA;UAQA;UAiBA;UAiBA;UAKA;UAIC;UAWD"}
@@ -1,10 +1,9 @@
1
1
  import { DEFAULT_THEMES } from "../constants.js";
2
- import { areLanguagesAttached } from "../highlighter/languages/areLanguagesAttached.js";
2
+ import { HighlighterDisposedError, resolveHighlighterType } from "../highlighter/highlighterType.js";
3
3
  import { getThemes } from "../utils/getThemes.js";
4
- import { attachResolvedThemes } from "../highlighter/themes/attachResolvedThemes.js";
5
- import { getSharedHighlighter } from "../highlighter/shared_highlighter.js";
4
+ import { getHighlighterIfLoaded, getSharedHighlighter } from "../highlighter/shared_highlighter.js";
6
5
  import { areThemesEqual } from "../utils/areThemesEqual.js";
7
- import { hasResolvedThemes } from "../highlighter/themes/hasResolvedThemes.js";
6
+ import { areLanguagesAttached } from "../highlighter/languages/areLanguagesAttached.js";
8
7
  import { areFileRenderOptionsEqual } from "../utils/areFileRenderOptionsEqual.js";
9
8
  import { getCustomExtensionsMap, getCustomExtensionsVersion, getFiletypeFromFileName } from "../utils/getFiletypeFromFileName.js";
10
9
  import { isFilePlainText } from "../utils/isFilePlainText.js";
@@ -19,14 +18,15 @@ import { getResolvedLanguages } from "../highlighter/languages/getResolvedLangua
19
18
  import { hasResolvedLanguages } from "../highlighter/languages/hasResolvedLanguages.js";
20
19
  import { resolveLanguages } from "../highlighter/languages/resolveLanguages.js";
21
20
  import { getResolvedThemes } from "../highlighter/themes/getResolvedThemes.js";
21
+ import { hasResolvedThemes } from "../highlighter/themes/hasResolvedThemes.js";
22
22
  import { resolveThemes } from "../highlighter/themes/resolveThemes.js";
23
+ import { decodeHastLines } from "./hastLinesTransport.js";
23
24
  import LRUMapPkg from "lru_map";
24
25
  //#region src/worker/WorkerPoolManager.ts
25
26
  const IGNORE_RESPONSE = Symbol("IGNORE_RESPONSE");
26
27
  const DEFAULT_WORKER_INITIALIZATION_TIMEOUT = 1e4;
27
28
  var WorkerPoolManager = class {
28
29
  options;
29
- highlighter;
30
30
  preferredHighlighter;
31
31
  renderOptions;
32
32
  renderOptionsRequestVersion = 0;
@@ -41,14 +41,15 @@ var WorkerPoolManager = class {
41
41
  nextRequestId = 0;
42
42
  themeSubscribers = /* @__PURE__ */ new Set();
43
43
  workersFailed = false;
44
+ terminated = false;
44
45
  statSubscribers = /* @__PURE__ */ new Set();
45
46
  fileCache;
46
47
  diffCache;
47
48
  _queuedBroadcast;
48
49
  lifecycleGeneration = 0;
49
- constructor(options, { langs, theme = DEFAULT_THEMES, useTokenTransformer = false, lineDiffType = "word-alt", maxLineDiffLength = 1e3, tokenizeMaxLineLength = 1e3, preferredHighlighter = "shiki-js" }) {
50
+ constructor(options, { langs, theme = DEFAULT_THEMES, useTokenTransformer = false, lineDiffType = "word-alt", maxLineDiffLength = 1e3, tokenizeMaxLineLength = 1e3, preferredHighlighter }) {
50
51
  this.options = options;
51
- this.preferredHighlighter = preferredHighlighter;
52
+ this.preferredHighlighter = resolveHighlighterType(preferredHighlighter);
52
53
  this.renderOptions = {
53
54
  theme,
54
55
  useTokenTransformer,
@@ -61,7 +62,16 @@ var WorkerPoolManager = class {
61
62
  this.queueInitialization(langs);
62
63
  }
63
64
  isWorkingPool() {
64
- return !this.workersFailed;
65
+ return !this.workersFailed && !this.terminated;
66
+ }
67
+ /**
68
+ * Whether a file or diff fits within `mainThreadMaxCharacters`, so it
69
+ * highlights on the main thread instead of a worker. Files count `contents`;
70
+ * diffs count both sides.
71
+ */
72
+ shouldHighlightOnMainThread(fileOrDiff) {
73
+ const { mainThreadMaxCharacters = -1 } = this.options;
74
+ return ("contents" in fileOrDiff ? fileOrDiff.contents.length : fileOrDiff.deletionCharacterCount + fileOrDiff.additionCharacterCount) <= mainThreadMaxCharacters;
65
75
  }
66
76
  getFileResultCache(file) {
67
77
  return file.cacheKey != null ? this.fileCache.get(file.cacheKey) : void 0;
@@ -69,6 +79,24 @@ var WorkerPoolManager = class {
69
79
  getDiffResultCache(diff) {
70
80
  return diff.cacheKey != null ? this.diffCache.get(diff.cacheKey) : void 0;
71
81
  }
82
+ setFileResultCache(cacheKey, { result, options }) {
83
+ if (cacheKey == null || !areFileRenderOptionsEqual(options, this.getFileRenderOptions())) return false;
84
+ this.fileCache.set(cacheKey, {
85
+ result,
86
+ options
87
+ });
88
+ this.queueBroadcastStateChanges();
89
+ return true;
90
+ }
91
+ setDiffResultCache(cacheKey, { result, options }) {
92
+ if (cacheKey == null || !areDiffRenderOptionsEqual(options, this.getDiffRenderOptions())) return false;
93
+ this.diffCache.set(cacheKey, {
94
+ result,
95
+ options
96
+ });
97
+ this.queueBroadcastStateChanges();
98
+ return true;
99
+ }
72
100
  inspectCaches() {
73
101
  const { fileCache, diffCache } = this;
74
102
  return {
@@ -102,24 +130,19 @@ var WorkerPoolManager = class {
102
130
  maxLineDiffLength,
103
131
  tokenizeMaxLineLength
104
132
  };
105
- if (!this.isInitialized()) await this.initialize();
133
+ if (!this.isInitialized()) try {
134
+ await this.initialize();
135
+ } catch (error) {
136
+ if (!this.workersFailed) throw error;
137
+ }
106
138
  if (!isCurrentRequest() || areDiffRenderOptionsEqual(newRenderOptions, this.renderOptions)) return;
107
139
  const themeNames = getThemes(theme);
108
140
  let resolvedThemes = [];
109
- if (!areThemesEqual(newRenderOptions.theme, this.renderOptions.theme)) {
110
- if (hasResolvedThemes(themeNames)) resolvedThemes = getResolvedThemes(themeNames);
111
- else resolvedThemes = await resolveThemes(themeNames);
112
- }
141
+ if (!areThemesEqual(newRenderOptions.theme, this.renderOptions.theme)) resolvedThemes = hasResolvedThemes(themeNames, this.preferredHighlighter) ? getResolvedThemes(themeNames, this.preferredHighlighter) : await resolveThemes(themeNames, this.preferredHighlighter);
113
142
  if (!isCurrentRequest()) return;
114
- if (this.highlighter != null) attachResolvedThemes(resolvedThemes, this.highlighter);
115
- else {
116
- const highlighter = await getSharedHighlighter({
117
- themes: themeNames,
118
- langs: ["text"],
119
- preferredHighlighter: this.preferredHighlighter
120
- });
143
+ if (getHighlighterIfLoaded({ theme }) == null) {
144
+ await this.loadSharedHighlighter(themeNames, ["text"]);
121
145
  if (!isCurrentRequest()) return;
122
- this.highlighter = highlighter;
123
146
  }
124
147
  const workerSetup = this.setRenderOptionsOnWorkers(newRenderOptions, resolvedThemes);
125
148
  this.renderOptions = newRenderOptions;
@@ -227,41 +250,34 @@ var WorkerPoolManager = class {
227
250
  return this.initialized === true;
228
251
  }
229
252
  async initialize(languages = []) {
230
- if (this.initialized === true) return;
231
- else if (this.initialized === false) {
253
+ if (this.initialized === true) {
254
+ if (getHighlighterIfLoaded({ theme: this.renderOptions.theme }) == null) await this.loadSharedHighlighter(getThemes(this.renderOptions.theme), ["text", ...languages]);
255
+ return;
256
+ } else if (this.initialized === false) {
257
+ this.terminated = false;
232
258
  const { lifecycleGeneration } = this;
233
259
  const initialization = new Promise((resolve, reject) => {
234
260
  (async () => {
235
261
  try {
236
262
  const themes = getThemes(this.renderOptions.theme);
237
- let resolvedThemes = [];
238
- if (hasResolvedThemes(themes)) resolvedThemes = getResolvedThemes(themes);
239
- else resolvedThemes = await resolveThemes(themes);
263
+ const resolvedThemes = hasResolvedThemes(themes, this.preferredHighlighter) ? getResolvedThemes(themes, this.preferredHighlighter) : await resolveThemes(themes, this.preferredHighlighter);
240
264
  if (!this.isCurrentLifecycle(lifecycleGeneration)) {
241
265
  resolve();
242
266
  return;
243
267
  }
244
268
  let resolvedLanguages = [];
245
- if (hasResolvedLanguages(languages)) resolvedLanguages = getResolvedLanguages(languages);
246
- else resolvedLanguages = await resolveLanguages(languages);
269
+ if (this.preferredHighlighter !== "highlights") resolvedLanguages = hasResolvedLanguages(languages) ? getResolvedLanguages(languages) : await resolveLanguages(languages);
247
270
  if (!this.isCurrentLifecycle(lifecycleGeneration)) {
248
271
  resolve();
249
272
  return;
250
273
  }
251
- const [highlighter] = await Promise.all([getSharedHighlighter({
252
- themes,
253
- langs: ["text", ...languages],
254
- preferredHighlighter: this.preferredHighlighter
255
- }), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
274
+ await Promise.all([this.loadSharedHighlighter(themes, ["text", ...languages]), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
256
275
  if (!this.isCurrentLifecycle(lifecycleGeneration)) {
257
276
  this.terminateWorkers();
258
277
  resolve();
259
278
  return;
260
279
  }
261
- this.highlighter = highlighter;
262
280
  this.initialized = true;
263
- this.diffCache.clear();
264
- this.fileCache.clear();
265
281
  this.drainQueue();
266
282
  this.queueBroadcastStateChanges();
267
283
  resolve();
@@ -286,6 +302,17 @@ var WorkerPoolManager = class {
286
302
  return initialization;
287
303
  } else return this.initialized;
288
304
  }
305
+ async loadSharedHighlighter(themes, langs) {
306
+ try {
307
+ await getSharedHighlighter({
308
+ themes,
309
+ langs,
310
+ preferredHighlighter: this.preferredHighlighter
311
+ });
312
+ } catch (error) {
313
+ if (!(error instanceof HighlighterDisposedError)) throw error;
314
+ }
315
+ }
289
316
  async initializeWorkers(resolvedThemes, resolvedLanguages) {
290
317
  this.workersFailed = false;
291
318
  const initPromises = [];
@@ -314,6 +341,7 @@ var WorkerPoolManager = class {
314
341
  id,
315
342
  request: {
316
343
  type: "initialize",
344
+ resultFormat: "hast-ops-v1",
317
345
  id,
318
346
  renderOptions: this.renderOptions,
319
347
  preferredHighlighter: this.preferredHighlighter,
@@ -380,7 +408,7 @@ var WorkerPoolManager = class {
380
408
  i++;
381
409
  continue;
382
410
  }
383
- const langs = getLangsFromTask(task);
411
+ const langs = getLangsFromRequest(task.request);
384
412
  const availableWorker = this.getAvailableWorker(langs);
385
413
  if (availableWorker == null) break;
386
414
  this.queuedTasks.splice(i, 1);
@@ -399,35 +427,52 @@ var WorkerPoolManager = class {
399
427
  }
400
428
  primeFileHighlightCache(file) {
401
429
  if (!this.isWorkingPool()) return Promise.reject(/* @__PURE__ */ new Error("WorkerPoolManager.primeFileHighlightCache: worker pool is not working"));
430
+ if (!this.shouldPrimeFileHighlightCache(file)) return Promise.resolve();
431
+ if (this.shouldHighlightOnMainThread(file)) {
432
+ const options = this.getFileRenderOptions();
433
+ return this.primeHighlightCacheOnMainThread(getLangsFromRequest({
434
+ type: "file",
435
+ file
436
+ }), options.theme, (highlighter) => this.setFileResultCache(file.cacheKey, {
437
+ result: renderFileWithHighlighter(file, highlighter, options),
438
+ options
439
+ }));
440
+ }
402
441
  const task = this.getOrCreateFileHighlightCacheTask(file);
403
442
  return task != null ? this.createRenderTaskCallbacks(task) : Promise.resolve();
404
443
  }
405
- getOrCreateFileHighlightCacheTask(file) {
444
+ shouldPrimeFileHighlightCache(file) {
406
445
  if (file.cacheKey == null) {
407
446
  console.warn(`WorkerPoolManager.primeFileHighlightCache: priming highlight cache requires file.cacheKey; skipping "${file.name}".`);
408
- return;
447
+ return false;
409
448
  }
410
449
  const cachedResult = this.getFileResultCache(file);
450
+ return !isFilePlainText(file) && (cachedResult == null || !areFileRenderOptionsEqual(cachedResult.options, this.getFileRenderOptions()));
451
+ }
452
+ getOrCreateFileHighlightCacheTask(file) {
411
453
  const highlightKey = this.getFileHighlightKey(file);
412
- if (highlightKey == null || isFilePlainText(file) || cachedResult != null && areFileRenderOptionsEqual(cachedResult.options, this.getFileRenderOptions())) return;
454
+ if (highlightKey == null) return;
413
455
  const existingTask = this.getTaskByHighlightKey(highlightKey);
414
456
  if (existingTask != null) {
457
+ if (existingTask.type !== "file") throw new Error("WorkerPoolManager.getOrCreateFileHighlightCacheTask: Invalid task type");
415
458
  existingTask.primeCache = true;
416
- return existingTask.type === "file" ? existingTask : void 0;
459
+ return existingTask;
417
460
  } else {
418
461
  const task = this.submitCacheTask({
419
462
  type: "file",
420
463
  file
421
464
  }, highlightKey);
422
- return task.type === "file" ? task : void 0;
465
+ if (task.type !== "file") throw new Error("WorkerPoolManager.getOrCreateFileHighlightCacheTask: Invalid task created");
466
+ return task;
423
467
  }
424
468
  }
425
469
  getPlainFileAST(file, startingLine, totalLines, lines) {
426
- if (this.highlighter == null) {
470
+ const highlighter = getHighlighterIfLoaded({ theme: this.renderOptions.theme });
471
+ if (highlighter == null) {
427
472
  this.queueInitialization();
428
473
  return;
429
474
  }
430
- return renderFileWithHighlighter(file, this.highlighter, this.renderOptions, {
475
+ return renderFileWithHighlighter(file, highlighter, this.renderOptions, {
431
476
  forcePlainText: true,
432
477
  startingLine,
433
478
  totalLines,
@@ -444,37 +489,73 @@ var WorkerPoolManager = class {
444
489
  }
445
490
  primeDiffHighlightCache(diff) {
446
491
  if (!this.isWorkingPool()) return Promise.reject(/* @__PURE__ */ new Error("WorkerPoolManager.primeDiffHighlightCache: worker pool is not working"));
492
+ if (!this.shouldPrimeDiffHighlightCache(diff)) return Promise.resolve();
493
+ if (this.shouldHighlightOnMainThread(diff)) {
494
+ const options = this.getDiffRenderOptions();
495
+ return this.primeHighlightCacheOnMainThread(getLangsFromRequest({
496
+ type: "diff",
497
+ diff
498
+ }), options.theme, (highlighter) => this.setDiffResultCache(diff.cacheKey, {
499
+ result: renderDiffWithHighlighter(diff, highlighter, options),
500
+ options
501
+ }));
502
+ }
447
503
  const task = this.getOrCreateDiffHighlightCacheTask(diff);
448
504
  return task != null ? this.createRenderTaskCallbacks(task) : Promise.resolve();
449
505
  }
450
- getOrCreateDiffHighlightCacheTask(diff) {
506
+ shouldPrimeDiffHighlightCache(diff) {
451
507
  if (diff.cacheKey == null) {
452
508
  console.warn(`WorkerPoolManager.primeDiffHighlightCache: priming highlight cache requires diff.cacheKey; skipping "${diff.prevName ?? diff.name}" -> "${diff.name}".`);
453
- return;
509
+ return false;
454
510
  }
455
511
  const cachedResult = this.getDiffResultCache(diff);
512
+ return !isDiffPlainText(diff) && (cachedResult == null || !areDiffRenderOptionsEqual(cachedResult.options, this.getDiffRenderOptions()));
513
+ }
514
+ primeHighlightCacheOnMainThread(langs, theme, highlightAndCacheResult) {
515
+ function highlightAndCacheIfLoaded() {
516
+ const highlighter = getHighlighterIfLoaded({
517
+ theme,
518
+ langs
519
+ });
520
+ return highlighter != null && highlightAndCacheResult(highlighter);
521
+ }
522
+ if (highlightAndCacheIfLoaded()) return Promise.resolve();
523
+ const { lifecycleGeneration } = this;
524
+ return this.loadSharedHighlighter(getThemes(theme), ["text", ...langs]).then(() => {
525
+ if (!this.isCurrentLifecycle(lifecycleGeneration)) throw new WorkerPoolTerminatedError();
526
+ if (!highlightAndCacheIfLoaded()) throw new WorkerPoolTaskCanceledError();
527
+ });
528
+ }
529
+ getOrCreateDiffHighlightCacheTask(diff) {
456
530
  const highlightKey = this.getDiffHighlightKey(diff);
457
- if (highlightKey == null || isDiffPlainText(diff) || cachedResult != null && areDiffRenderOptionsEqual(cachedResult.options, this.getDiffRenderOptions())) return;
531
+ if (highlightKey == null) return;
458
532
  const existingTask = this.getTaskByHighlightKey(highlightKey);
459
533
  if (existingTask != null) {
534
+ if (existingTask.type !== "diff") throw new Error("WorkerPoolManager.getOrCreateDiffHighlightCacheTask: Invalid task type");
460
535
  existingTask.primeCache = true;
461
- return existingTask.type === "diff" ? existingTask : void 0;
536
+ return existingTask;
462
537
  } else {
463
538
  const task = this.submitCacheTask({
464
539
  type: "diff",
465
540
  diff
466
541
  }, highlightKey);
467
- return task.type === "diff" ? task : void 0;
542
+ if (task.type !== "diff") throw new Error("WorkerPoolManager.getOrCreateDiffHighlightCacheTask: Invalid task created");
543
+ return task;
468
544
  }
469
545
  }
470
546
  getPlainDiffAST(diff, startingLine, totalLines, expandedHunks, collapsedContextThreshold) {
471
- return this.highlighter != null ? renderDiffWithHighlighter(diff, this.highlighter, this.renderOptions, {
547
+ const highlighter = getHighlighterIfLoaded({ theme: this.renderOptions.theme });
548
+ if (highlighter == null) {
549
+ this.queueInitialization();
550
+ return;
551
+ }
552
+ return renderDiffWithHighlighter(diff, highlighter, this.renderOptions, {
472
553
  forcePlainText: true,
473
554
  startingLine,
474
555
  totalLines,
475
556
  expandedHunks,
476
557
  collapsedContextThreshold
477
- }) : void 0;
558
+ });
478
559
  }
479
560
  terminate() {
480
561
  this.lifecycleGeneration++;
@@ -489,9 +570,9 @@ var WorkerPoolManager = class {
489
570
  this.queuedTaskByInstance.clear();
490
571
  this.taskByHighlightKey.clear();
491
572
  this.activeTaskById.clear();
492
- this.highlighter = void 0;
493
573
  this.initialized = false;
494
574
  this.workersFailed = false;
575
+ this.terminated = true;
495
576
  this.queueBroadcastStateChanges();
496
577
  }
497
578
  isCurrentLifecycle(lifecycleGeneration) {
@@ -625,15 +706,12 @@ var WorkerPoolManager = class {
625
706
  }
626
707
  async resolveLanguagesAndExecuteTask(availableWorker, task, langs) {
627
708
  try {
628
- const mainThreadLangs = langs.filter((lang) => !areLanguagesAttached(lang));
629
- if (mainThreadLangs.length > 0) getSharedHighlighter({
630
- themes: getThemes(this.renderOptions.theme),
631
- langs: ["text", ...mainThreadLangs],
632
- preferredHighlighter: this.preferredHighlighter
633
- }).catch((error) => {
709
+ const highlighter = getHighlighterIfLoaded();
710
+ const mainThreadLangs = langs.filter((lang) => highlighter == null || !areLanguagesAttached(lang, highlighter));
711
+ if (mainThreadLangs.length > 0) this.loadSharedHighlighter(getThemes(this.renderOptions.theme), ["text", ...mainThreadLangs]).catch((error) => {
634
712
  console.error(error);
635
713
  });
636
- const workerMissingLangs = langs.filter((lang) => !availableWorker.langs.has(lang));
714
+ const workerMissingLangs = this.preferredHighlighter === "highlights" ? [] : langs.filter((lang) => !availableWorker.langs.has(lang));
637
715
  if (workerMissingLangs.length > 0) {
638
716
  if (hasResolvedLanguages(workerMissingLangs)) task.request.resolvedLanguages = getResolvedLanguages(workerMissingLangs);
639
717
  else task.request.resolvedLanguages = await resolveLanguages(workerMissingLangs);
@@ -681,9 +759,13 @@ var WorkerPoolManager = class {
681
759
  break;
682
760
  case "file": {
683
761
  if (task.type !== "file") throw new Error("handleWorkerMessage: task/response dont match");
684
- const { result, options } = response;
762
+ const { options } = response;
685
763
  if (!this.isCurrentRenderTask(task) || !areFileRenderOptionsEqual(options, this.getFileRenderOptions())) throw IGNORE_RESPONSE;
686
764
  const { request } = task;
765
+ const result = {
766
+ ...response.result,
767
+ code: decodeHastLines(response.result.code)
768
+ };
687
769
  this.syncCustomExtensionVersion(managedWorker, request);
688
770
  if (task.cacheKeyAtDispatch != null) this.fileCache.set(task.cacheKeyAtDispatch, {
689
771
  result,
@@ -695,9 +777,16 @@ var WorkerPoolManager = class {
695
777
  }
696
778
  case "diff": {
697
779
  if (task.type !== "diff") throw new Error("handleWorkerMessage: task/response dont match");
698
- const { result, options } = response;
780
+ const { options } = response;
699
781
  if (!this.isCurrentRenderTask(task) || !areDiffRenderOptionsEqual(options, this.getDiffRenderOptions())) throw IGNORE_RESPONSE;
700
782
  const { request } = task;
783
+ const result = {
784
+ ...response.result,
785
+ code: {
786
+ deletionLines: decodeHastLines(response.result.code.deletionLines),
787
+ additionLines: decodeHastLines(response.result.code.additionLines)
788
+ }
789
+ };
701
790
  this.syncCustomExtensionVersion(managedWorker, request);
702
791
  if (task.cacheKeyAtDispatch != null) this.diffCache.set(task.cacheKeyAtDispatch, {
703
792
  result,
@@ -904,16 +993,15 @@ var WorkerPoolManager = class {
904
993
  function shouldSyncCustomExtensions(request) {
905
994
  return request.type === "initialize" || request.type === "file" || request.type === "diff";
906
995
  }
907
- function getLangsFromTask(task) {
996
+ function getLangsFromRequest(request) {
908
997
  const langs = /* @__PURE__ */ new Set();
909
- if (task.type === "initialize" || task.type === "set-render-options") return [];
910
- switch (task.type) {
998
+ switch (request.type) {
911
999
  case "file":
912
- langs.add(task.request.file.lang ?? getFiletypeFromFileName(task.request.file.name));
1000
+ langs.add(request.file.lang ?? getFiletypeFromFileName(request.file.name));
913
1001
  break;
914
1002
  case "diff":
915
- langs.add(task.request.diff.lang ?? getFiletypeFromFileName(task.request.diff.name));
916
- langs.add(task.request.diff.lang ?? getFiletypeFromFileName(task.request.diff.prevName ?? "-"));
1003
+ langs.add(request.diff.lang ?? getFiletypeFromFileName(request.diff.name));
1004
+ langs.add(request.diff.lang ?? getFiletypeFromFileName(request.diff.prevName ?? "-"));
917
1005
  }
918
1006
  langs.delete("text");
919
1007
  return Array.from(langs);