@pierre/diffs 1.5.2 → 1.6.0-beta.1

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 (274) hide show
  1. package/README.md +4 -3
  2. package/dist/components/CodeView.d.ts.map +1 -1
  3. package/dist/components/CodeView.js +6 -5
  4. package/dist/components/CodeView.js.map +1 -1
  5. package/dist/components/File.d.ts.map +1 -1
  6. package/dist/components/File.js +11 -6
  7. package/dist/components/File.js.map +1 -1
  8. package/dist/components/FileDiff.d.ts.map +1 -1
  9. package/dist/components/FileDiff.js +12 -7
  10. package/dist/components/FileDiff.js.map +1 -1
  11. package/dist/components/FileStream.d.ts +6 -4
  12. package/dist/components/FileStream.d.ts.map +1 -1
  13. package/dist/components/FileStream.js +49 -36
  14. package/dist/components/FileStream.js.map +1 -1
  15. package/dist/constants.d.ts +3 -2
  16. package/dist/constants.d.ts.map +1 -1
  17. package/dist/constants.js +2 -1
  18. package/dist/constants.js.map +1 -1
  19. package/dist/editor/editor.d.ts +2 -1
  20. package/dist/editor/editor.d.ts.map +1 -1
  21. package/dist/editor/editor.js +5 -1
  22. package/dist/editor/editor.js.map +1 -1
  23. package/dist/editor/tokenizer.d.ts +6 -4
  24. package/dist/editor/tokenizer.d.ts.map +1 -1
  25. package/dist/editor/tokenizer.js +25 -470
  26. package/dist/editor/tokenizer.js.map +1 -1
  27. package/dist/highlighter/DiffsEditorTokenizer.d.ts +16 -0
  28. package/dist/highlighter/DiffsEditorTokenizer.d.ts.map +1 -0
  29. package/dist/highlighter/DiffsEditorTokenizer.js +0 -0
  30. package/dist/highlighter/DiffsHighlighter.d.ts +41 -0
  31. package/dist/highlighter/DiffsHighlighter.d.ts.map +1 -0
  32. package/dist/highlighter/DiffsHighlighter.js +39 -0
  33. package/dist/highlighter/DiffsHighlighter.js.map +1 -0
  34. package/dist/highlighter/backends/highlights.d.ts +26 -0
  35. package/dist/highlighter/backends/highlights.d.ts.map +1 -0
  36. package/dist/highlighter/backends/highlights.js +71 -0
  37. package/dist/highlighter/backends/highlights.js.map +1 -0
  38. package/dist/highlighter/backends/shiki.d.ts +27 -0
  39. package/dist/highlighter/backends/shiki.d.ts.map +1 -0
  40. package/dist/highlighter/backends/shiki.js +107 -0
  41. package/dist/highlighter/backends/shiki.js.map +1 -0
  42. package/dist/highlighter/highlighterType.d.ts +13 -0
  43. package/dist/highlighter/highlighterType.d.ts.map +1 -0
  44. package/dist/highlighter/highlighterType.js +32 -0
  45. package/dist/highlighter/highlighterType.js.map +1 -0
  46. package/dist/highlighter/highlights-editor.d.ts +24 -0
  47. package/dist/highlighter/highlights-editor.d.ts.map +1 -0
  48. package/dist/highlighter/highlights-editor.js +166 -0
  49. package/dist/highlighter/highlights-editor.js.map +1 -0
  50. package/dist/highlighter/highlights-stream.d.ts +20 -0
  51. package/dist/highlighter/highlights-stream.d.ts.map +1 -0
  52. package/dist/highlighter/highlights-stream.js +93 -0
  53. package/dist/highlighter/highlights-stream.js.map +1 -0
  54. package/dist/highlighter/languages/areLanguagesAttached.d.ts +2 -1
  55. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  56. package/dist/highlighter/languages/areLanguagesAttached.js +4 -6
  57. package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
  58. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +6 -1
  59. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  60. package/dist/highlighter/languages/attachResolvedLanguages.js +6 -11
  61. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  62. package/dist/highlighter/languages/constants.d.ts +1 -1
  63. package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -1
  64. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  65. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  66. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  67. package/dist/highlighter/languages/resolveLanguage.js +19 -16
  68. package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
  69. package/dist/highlighter/languages/resolveLanguages.d.ts +1 -1
  70. package/dist/highlighter/shared_highlighter.d.ts +23 -9
  71. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  72. package/dist/highlighter/shared_highlighter.js +59 -47
  73. package/dist/highlighter/shared_highlighter.js.map +1 -1
  74. package/dist/highlighter/shiki-editor.d.ts +25 -0
  75. package/dist/highlighter/shiki-editor.d.ts.map +1 -0
  76. package/dist/highlighter/shiki-editor.js +483 -0
  77. package/dist/highlighter/shiki-editor.js.map +1 -0
  78. package/dist/highlighter/shiki-stream.d.ts +20 -0
  79. package/dist/highlighter/shiki-stream.d.ts.map +1 -0
  80. package/dist/highlighter/shiki-stream.js +60 -0
  81. package/dist/highlighter/shiki-stream.js.map +1 -0
  82. package/dist/highlighter/stream-tokenizer.d.ts +40 -0
  83. package/dist/highlighter/stream-tokenizer.d.ts.map +1 -0
  84. package/dist/highlighter/stream-tokenizer.js +70 -0
  85. package/dist/highlighter/stream-tokenizer.js.map +1 -0
  86. package/dist/highlighter/themes/areThemesAttached.d.ts +3 -2
  87. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  88. package/dist/highlighter/themes/areThemesAttached.js +5 -4
  89. package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
  90. package/dist/highlighter/themes/attachResolvedThemes.d.ts +5 -2
  91. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  92. package/dist/highlighter/themes/attachResolvedThemes.js +4 -16
  93. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
  94. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +3 -1
  95. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  96. package/dist/highlighter/themes/cleanUpResolvedThemes.js +8 -5
  97. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
  98. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts +7 -0
  99. package/dist/highlighter/themes/createCSSVariablesTheme.d.ts.map +1 -0
  100. package/dist/highlighter/themes/createCSSVariablesTheme.js +89 -0
  101. package/dist/highlighter/themes/createCSSVariablesTheme.js.map +1 -0
  102. package/dist/highlighter/themes/createCachedLoader.d.ts +5 -0
  103. package/dist/highlighter/themes/createCachedLoader.d.ts.map +1 -0
  104. package/dist/highlighter/themes/createCachedLoader.js +15 -0
  105. package/dist/highlighter/themes/createCachedLoader.js.map +1 -0
  106. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +3 -2
  107. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  108. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +4 -4
  109. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
  110. package/dist/highlighter/themes/getResolvedThemes.d.ts +3 -2
  111. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  112. package/dist/highlighter/themes/getResolvedThemes.js +4 -3
  113. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
  114. package/dist/highlighter/themes/hasResolvedThemes.d.ts +2 -2
  115. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  116. package/dist/highlighter/themes/hasResolvedThemes.js +4 -3
  117. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
  118. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  119. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +3 -3
  120. package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
  121. package/dist/highlighter/themes/registerCustomTheme.d.ts +9 -4
  122. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  123. package/dist/highlighter/themes/registerCustomTheme.js +8 -16
  124. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
  125. package/dist/highlighter/themes/resolveTheme.d.ts +3 -2
  126. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  127. package/dist/highlighter/themes/resolveTheme.js +4 -7
  128. package/dist/highlighter/themes/resolveTheme.js.map +1 -1
  129. package/dist/highlighter/themes/resolveThemes.d.ts +3 -2
  130. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  131. package/dist/highlighter/themes/resolveThemes.js +4 -7
  132. package/dist/highlighter/themes/resolveThemes.js.map +1 -1
  133. package/dist/highlighter/themes/themeResolver.d.ts +10 -4
  134. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  135. package/dist/highlighter/themes/themeResolver.js +141 -2
  136. package/dist/highlighter/themes/themeResolver.js.map +1 -1
  137. package/dist/highlighter/themes/types.d.ts +23 -0
  138. package/dist/highlighter/themes/types.d.ts.map +1 -0
  139. package/dist/highlighter/themes/types.js +0 -0
  140. package/dist/highlighter/tokenizer-types.d.ts +35 -0
  141. package/dist/highlighter/tokenizer-types.d.ts.map +1 -0
  142. package/dist/highlighter/tokenizer-types.js +0 -0
  143. package/dist/highlighter/types.d.ts +55 -0
  144. package/dist/highlighter/types.d.ts.map +1 -0
  145. package/dist/highlighter/types.js +0 -0
  146. package/dist/index.d.ts +14 -10
  147. package/dist/index.js +16 -18
  148. package/dist/managers/InteractionManager.d.ts.map +1 -1
  149. package/dist/managers/InteractionManager.js +2 -2
  150. package/dist/managers/InteractionManager.js.map +1 -1
  151. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +9 -1
  152. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  153. package/dist/react/CodeView.js +1 -1
  154. package/dist/react/index.d.ts +8 -3
  155. package/dist/renderers/DiffHunksRenderer.d.ts +2 -1
  156. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  157. package/dist/renderers/DiffHunksRenderer.js +31 -22
  158. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  159. package/dist/renderers/FileRenderer.d.ts +2 -1
  160. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  161. package/dist/renderers/FileRenderer.js +33 -24
  162. package/dist/renderers/FileRenderer.js.map +1 -1
  163. package/dist/shiki-stream/index.d.ts +3 -3
  164. package/dist/shiki-stream/index.js +1 -2
  165. package/dist/shiki-stream/stream.d.ts +4 -4
  166. package/dist/shiki-stream/stream.d.ts.map +1 -1
  167. package/dist/shiki-stream/stream.js +20 -9
  168. package/dist/shiki-stream/stream.js.map +1 -1
  169. package/dist/shiki-stream/types.d.ts +7 -38
  170. package/dist/shiki-stream/types.d.ts.map +1 -1
  171. package/dist/ssr/FileDiffReact.js +1 -1
  172. package/dist/ssr/index.d.ts +7 -2
  173. package/dist/ssr/renderHTML.js +2 -2
  174. package/dist/ssr/renderHTML.js.map +1 -1
  175. package/dist/style.js +1 -1
  176. package/dist/style.js.map +1 -1
  177. package/dist/types.d.ts +10 -11
  178. package/dist/types.d.ts.map +1 -1
  179. package/dist/utils/createSpanNodeFromToken.d.ts +3 -2
  180. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  181. package/dist/utils/createSpanNodeFromToken.js +4 -5
  182. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  183. package/dist/utils/cssWrappers.d.ts.map +1 -1
  184. package/dist/utils/cssWrappers.js +12 -0
  185. package/dist/utils/cssWrappers.js.map +1 -1
  186. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  187. package/dist/utils/getHighlighterOptions.js +3 -2
  188. package/dist/utils/getHighlighterOptions.js.map +1 -1
  189. package/dist/utils/getHighlighterThemeStyles.d.ts +2 -1
  190. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  191. package/dist/utils/getHighlighterThemeStyles.js +13 -3
  192. package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
  193. package/dist/utils/getTokenOptions.d.ts +7 -0
  194. package/dist/utils/getTokenOptions.d.ts.map +1 -0
  195. package/dist/utils/getTokenOptions.js +16 -0
  196. package/dist/utils/getTokenOptions.js.map +1 -0
  197. package/dist/utils/hastToHtml.d.ts +10 -0
  198. package/dist/utils/hastToHtml.d.ts.map +1 -0
  199. package/dist/utils/hastToHtml.js +125 -0
  200. package/dist/utils/hastToHtml.js.map +1 -0
  201. package/dist/utils/parseDiffDecorations.d.ts +2 -1
  202. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  203. package/dist/utils/renderDiffWithHighlighter.d.ts +3 -2
  204. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  205. package/dist/utils/renderDiffWithHighlighter.js +33 -48
  206. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  207. package/dist/utils/renderFileWithHighlighter.d.ts +3 -2
  208. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  209. package/dist/utils/renderFileWithHighlighter.js +10 -26
  210. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  211. package/dist/utils/renderTokenLines.d.ts +17 -0
  212. package/dist/utils/renderTokenLines.d.ts.map +1 -0
  213. package/dist/utils/renderTokenLines.js +246 -0
  214. package/dist/utils/renderTokenLines.js.map +1 -0
  215. package/dist/utils/resolvePreferredHighlighter.d.ts +13 -0
  216. package/dist/utils/resolvePreferredHighlighter.d.ts.map +1 -0
  217. package/dist/utils/resolvePreferredHighlighter.js +11 -0
  218. package/dist/utils/resolvePreferredHighlighter.js.map +1 -0
  219. package/dist/utils/setDeferredArrayItem.d.ts +5 -0
  220. package/dist/utils/setDeferredArrayItem.d.ts.map +1 -0
  221. package/dist/utils/setDeferredArrayItem.js +39 -0
  222. package/dist/utils/setDeferredArrayItem.js.map +1 -0
  223. package/dist/utils/tokenStyle.d.ts +7 -0
  224. package/dist/utils/tokenStyle.d.ts.map +1 -0
  225. package/dist/utils/tokenStyle.js +28 -0
  226. package/dist/utils/tokenStyle.js.map +1 -0
  227. package/dist/utils/tokensToHtml.d.ts +8 -0
  228. package/dist/utils/tokensToHtml.d.ts.map +1 -0
  229. package/dist/utils/tokensToHtml.js +45 -0
  230. package/dist/utils/tokensToHtml.js.map +1 -0
  231. package/dist/utils/wrapTokenFragments.js.map +1 -1
  232. package/dist/worker/WorkerPoolManager.d.ts +2 -2
  233. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  234. package/dist/worker/WorkerPoolManager.js +56 -46
  235. package/dist/worker/WorkerPoolManager.js.map +1 -1
  236. package/dist/worker/hastLinesTransport.d.ts +14 -0
  237. package/dist/worker/hastLinesTransport.d.ts.map +1 -0
  238. package/dist/worker/hastLinesTransport.js +156 -0
  239. package/dist/worker/hastLinesTransport.js.map +1 -0
  240. package/dist/worker/highlights-sAHlxqlf.js +317 -0
  241. package/dist/worker/highlights-sAHlxqlf.js.map +1 -0
  242. package/dist/worker/index.d.ts +1 -1
  243. package/dist/worker/shiki-Bx2JpdqZ.js +697 -0
  244. package/dist/worker/shiki-Bx2JpdqZ.js.map +1 -0
  245. package/dist/worker/stream-tokenizer-YZ6M1qSx.js +424 -0
  246. package/dist/worker/stream-tokenizer-YZ6M1qSx.js.map +1 -0
  247. package/dist/worker/types.d.ts +5 -3
  248. package/dist/worker/types.d.ts.map +1 -1
  249. package/dist/worker/worker-portable.js +41 -13337
  250. package/dist/worker/worker-portable.js.map +1 -1
  251. package/dist/worker/worker.js +672 -349
  252. package/dist/worker/worker.js.map +1 -1
  253. package/dist/worker/workerMessage.d.ts +24 -0
  254. package/dist/worker/workerMessage.d.ts.map +1 -0
  255. package/dist/worker/workerMessage.js +0 -0
  256. package/package.json +33 -29
  257. package/dist/highlighter/themes/constants.d.ts +0 -5
  258. package/dist/highlighter/themes/constants.d.ts.map +0 -1
  259. package/dist/highlighter/themes/constants.js +0 -6
  260. package/dist/highlighter/themes/constants.js.map +0 -1
  261. package/dist/highlighter/themes/themeResolution.d.ts +0 -7
  262. package/dist/highlighter/themes/themeResolution.d.ts.map +0 -1
  263. package/dist/highlighter/themes/themeResolution.js +0 -21
  264. package/dist/highlighter/themes/themeResolution.js.map +0 -1
  265. package/dist/shiki-stream/tokenizer.d.ts +0 -23
  266. package/dist/shiki-stream/tokenizer.d.ts.map +0 -1
  267. package/dist/shiki-stream/tokenizer.js +0 -72
  268. package/dist/shiki-stream/tokenizer.js.map +0 -1
  269. package/dist/utils/createTransformerWithState.d.ts +0 -12
  270. package/dist/utils/createTransformerWithState.d.ts.map +0 -1
  271. package/dist/utils/createTransformerWithState.js +0 -89
  272. package/dist/utils/createTransformerWithState.js.map +0 -1
  273. package/dist/worker/wasm-B9ZqxnKj.js +0 -8
  274. 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;
@@ -52,6 +51,7 @@ declare class WorkerPoolManager {
52
51
  cleanUpTasks(instance: RenderTaskInstance): void;
53
52
  isInitialized(): boolean;
54
53
  initialize(languages?: SupportedLanguages[]): Promise<void>;
54
+ private loadSharedHighlighter;
55
55
  private initializeWorkers;
56
56
  /**
57
57
  * Pass worker errors to onWorkerError, or log them if no callback is set.
@@ -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":";;;;UAkFU;EACR,WAAW,eAAe;EAC1B,WAAW,eAAe;;UAYlB;EACR;;KAKG,qBAAqB,uBAAuB;cAEpC;UAiCD;mBAhCO;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;EAwE9B,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;UAyFjD;UAiBA;;;;;;;;;UAgGN;UA8BA;EA2BD,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,eAAe;UAe5C;EAgCD,gBACL,MAAM,cACN,sBACA,oBACA,mBACC;EAgBI,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,mBAAmB;UAehD;EAgCD,gBACL,MAAM,kBACN,sBACA,oBACA,gBAAgB,YAAY,6BAC5B,qCACC;EAiBI;UAoBC;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;
@@ -46,9 +46,9 @@ var WorkerPoolManager = class {
46
46
  diffCache;
47
47
  _queuedBroadcast;
48
48
  lifecycleGeneration = 0;
49
- constructor(options, { langs, theme = DEFAULT_THEMES, useTokenTransformer = false, lineDiffType = "word-alt", maxLineDiffLength = 1e3, tokenizeMaxLineLength = 1e3, preferredHighlighter = "shiki-js" }) {
49
+ constructor(options, { langs, theme = DEFAULT_THEMES, useTokenTransformer = false, lineDiffType = "word-alt", maxLineDiffLength = 1e3, tokenizeMaxLineLength = 1e3, preferredHighlighter }) {
50
50
  this.options = options;
51
- this.preferredHighlighter = preferredHighlighter;
51
+ this.preferredHighlighter = resolveHighlighterType(preferredHighlighter);
52
52
  this.renderOptions = {
53
53
  theme,
54
54
  useTokenTransformer,
@@ -106,20 +106,11 @@ var WorkerPoolManager = class {
106
106
  if (!isCurrentRequest() || areDiffRenderOptionsEqual(newRenderOptions, this.renderOptions)) return;
107
107
  const themeNames = getThemes(theme);
108
108
  let resolvedThemes = [];
109
- if (!areThemesEqual(newRenderOptions.theme, this.renderOptions.theme)) {
110
- if (hasResolvedThemes(themeNames)) resolvedThemes = getResolvedThemes(themeNames);
111
- else resolvedThemes = await resolveThemes(themeNames);
112
- }
109
+ if (!areThemesEqual(newRenderOptions.theme, this.renderOptions.theme)) resolvedThemes = hasResolvedThemes(themeNames, this.preferredHighlighter) ? getResolvedThemes(themeNames, this.preferredHighlighter) : await resolveThemes(themeNames, this.preferredHighlighter);
113
110
  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
- });
111
+ if (getHighlighterIfLoaded({ theme }) == null) {
112
+ await this.loadSharedHighlighter(themeNames, ["text"]);
121
113
  if (!isCurrentRequest()) return;
122
- this.highlighter = highlighter;
123
114
  }
124
115
  const workerSetup = this.setRenderOptionsOnWorkers(newRenderOptions, resolvedThemes);
125
116
  this.renderOptions = newRenderOptions;
@@ -227,38 +218,32 @@ var WorkerPoolManager = class {
227
218
  return this.initialized === true;
228
219
  }
229
220
  async initialize(languages = []) {
230
- if (this.initialized === true) return;
231
- else if (this.initialized === false) {
221
+ if (this.initialized === true) {
222
+ if (getHighlighterIfLoaded({ theme: this.renderOptions.theme }) == null) await this.loadSharedHighlighter(getThemes(this.renderOptions.theme), ["text", ...languages]);
223
+ return;
224
+ } else if (this.initialized === false) {
232
225
  const { lifecycleGeneration } = this;
233
226
  const initialization = new Promise((resolve, reject) => {
234
227
  (async () => {
235
228
  try {
236
229
  const themes = getThemes(this.renderOptions.theme);
237
- let resolvedThemes = [];
238
- if (hasResolvedThemes(themes)) resolvedThemes = getResolvedThemes(themes);
239
- else resolvedThemes = await resolveThemes(themes);
230
+ const resolvedThemes = hasResolvedThemes(themes, this.preferredHighlighter) ? getResolvedThemes(themes, this.preferredHighlighter) : await resolveThemes(themes, this.preferredHighlighter);
240
231
  if (!this.isCurrentLifecycle(lifecycleGeneration)) {
241
232
  resolve();
242
233
  return;
243
234
  }
244
235
  let resolvedLanguages = [];
245
- if (hasResolvedLanguages(languages)) resolvedLanguages = getResolvedLanguages(languages);
246
- else resolvedLanguages = await resolveLanguages(languages);
236
+ if (this.preferredHighlighter !== "highlights") resolvedLanguages = hasResolvedLanguages(languages) ? getResolvedLanguages(languages) : await resolveLanguages(languages);
247
237
  if (!this.isCurrentLifecycle(lifecycleGeneration)) {
248
238
  resolve();
249
239
  return;
250
240
  }
251
- const [highlighter] = await Promise.all([getSharedHighlighter({
252
- themes,
253
- langs: ["text", ...languages],
254
- preferredHighlighter: this.preferredHighlighter
255
- }), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
241
+ await Promise.all([this.loadSharedHighlighter(themes, ["text", ...languages]), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
256
242
  if (!this.isCurrentLifecycle(lifecycleGeneration)) {
257
243
  this.terminateWorkers();
258
244
  resolve();
259
245
  return;
260
246
  }
261
- this.highlighter = highlighter;
262
247
  this.initialized = true;
263
248
  this.diffCache.clear();
264
249
  this.fileCache.clear();
@@ -286,6 +271,17 @@ var WorkerPoolManager = class {
286
271
  return initialization;
287
272
  } else return this.initialized;
288
273
  }
274
+ async loadSharedHighlighter(themes, langs) {
275
+ try {
276
+ await getSharedHighlighter({
277
+ themes,
278
+ langs,
279
+ preferredHighlighter: this.preferredHighlighter
280
+ });
281
+ } catch (error) {
282
+ if (!(error instanceof HighlighterDisposedError)) throw error;
283
+ }
284
+ }
289
285
  async initializeWorkers(resolvedThemes, resolvedLanguages) {
290
286
  this.workersFailed = false;
291
287
  const initPromises = [];
@@ -314,6 +310,7 @@ var WorkerPoolManager = class {
314
310
  id,
315
311
  request: {
316
312
  type: "initialize",
313
+ resultFormat: "hast-ops-v1",
317
314
  id,
318
315
  renderOptions: this.renderOptions,
319
316
  preferredHighlighter: this.preferredHighlighter,
@@ -423,11 +420,12 @@ var WorkerPoolManager = class {
423
420
  }
424
421
  }
425
422
  getPlainFileAST(file, startingLine, totalLines, lines) {
426
- if (this.highlighter == null) {
423
+ const highlighter = getHighlighterIfLoaded({ theme: this.renderOptions.theme });
424
+ if (highlighter == null) {
427
425
  this.queueInitialization();
428
426
  return;
429
427
  }
430
- return renderFileWithHighlighter(file, this.highlighter, this.renderOptions, {
428
+ return renderFileWithHighlighter(file, highlighter, this.renderOptions, {
431
429
  forcePlainText: true,
432
430
  startingLine,
433
431
  totalLines,
@@ -468,13 +466,18 @@ var WorkerPoolManager = class {
468
466
  }
469
467
  }
470
468
  getPlainDiffAST(diff, startingLine, totalLines, expandedHunks, collapsedContextThreshold) {
471
- return this.highlighter != null ? renderDiffWithHighlighter(diff, this.highlighter, this.renderOptions, {
469
+ const highlighter = getHighlighterIfLoaded({ theme: this.renderOptions.theme });
470
+ if (highlighter == null) {
471
+ this.queueInitialization();
472
+ return;
473
+ }
474
+ return renderDiffWithHighlighter(diff, highlighter, this.renderOptions, {
472
475
  forcePlainText: true,
473
476
  startingLine,
474
477
  totalLines,
475
478
  expandedHunks,
476
479
  collapsedContextThreshold
477
- }) : void 0;
480
+ });
478
481
  }
479
482
  terminate() {
480
483
  this.lifecycleGeneration++;
@@ -489,7 +492,6 @@ var WorkerPoolManager = class {
489
492
  this.queuedTaskByInstance.clear();
490
493
  this.taskByHighlightKey.clear();
491
494
  this.activeTaskById.clear();
492
- this.highlighter = void 0;
493
495
  this.initialized = false;
494
496
  this.workersFailed = false;
495
497
  this.queueBroadcastStateChanges();
@@ -625,15 +627,12 @@ var WorkerPoolManager = class {
625
627
  }
626
628
  async resolveLanguagesAndExecuteTask(availableWorker, task, langs) {
627
629
  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) => {
630
+ const highlighter = getHighlighterIfLoaded();
631
+ const mainThreadLangs = langs.filter((lang) => highlighter == null || !areLanguagesAttached(lang, highlighter));
632
+ if (mainThreadLangs.length > 0) this.loadSharedHighlighter(getThemes(this.renderOptions.theme), ["text", ...mainThreadLangs]).catch((error) => {
634
633
  console.error(error);
635
634
  });
636
- const workerMissingLangs = langs.filter((lang) => !availableWorker.langs.has(lang));
635
+ const workerMissingLangs = this.preferredHighlighter === "highlights" ? [] : langs.filter((lang) => !availableWorker.langs.has(lang));
637
636
  if (workerMissingLangs.length > 0) {
638
637
  if (hasResolvedLanguages(workerMissingLangs)) task.request.resolvedLanguages = getResolvedLanguages(workerMissingLangs);
639
638
  else task.request.resolvedLanguages = await resolveLanguages(workerMissingLangs);
@@ -681,9 +680,13 @@ var WorkerPoolManager = class {
681
680
  break;
682
681
  case "file": {
683
682
  if (task.type !== "file") throw new Error("handleWorkerMessage: task/response dont match");
684
- const { result, options } = response;
683
+ const { options } = response;
685
684
  if (!this.isCurrentRenderTask(task) || !areFileRenderOptionsEqual(options, this.getFileRenderOptions())) throw IGNORE_RESPONSE;
686
685
  const { request } = task;
686
+ const result = {
687
+ ...response.result,
688
+ code: decodeHastLines(response.result.code)
689
+ };
687
690
  this.syncCustomExtensionVersion(managedWorker, request);
688
691
  if (task.cacheKeyAtDispatch != null) this.fileCache.set(task.cacheKeyAtDispatch, {
689
692
  result,
@@ -695,9 +698,16 @@ var WorkerPoolManager = class {
695
698
  }
696
699
  case "diff": {
697
700
  if (task.type !== "diff") throw new Error("handleWorkerMessage: task/response dont match");
698
- const { result, options } = response;
701
+ const { options } = response;
699
702
  if (!this.isCurrentRenderTask(task) || !areDiffRenderOptionsEqual(options, this.getDiffRenderOptions())) throw IGNORE_RESPONSE;
700
703
  const { request } = task;
704
+ const result = {
705
+ ...response.result,
706
+ code: {
707
+ deletionLines: decodeHastLines(response.result.code.deletionLines),
708
+ additionLines: decodeHastLines(response.result.code.additionLines)
709
+ }
710
+ };
701
711
  this.syncCustomExtensionVersion(managedWorker, request);
702
712
  if (task.cacheKeyAtDispatch != null) this.diffCache.set(task.cacheKeyAtDispatch, {
703
713
  result,