@openclaw/diffs 2026.9.5 → 2026.9.7

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 (892) hide show
  1. package/README.md +2 -1
  2. package/assets/icon.png +0 -0
  3. package/dist/.setup/{browser.runtime-VjaO3wrj.mjs → browser.runtime-v15gbeC0.mjs} +1 -1
  4. package/dist/.setup/{viewer-assets-D3qrnaxI.mjs → viewer-assets-Bg9efLih.mjs} +24 -49
  5. package/dist/assets/viewer-runtime.js +37 -37
  6. package/dist/index.js +282 -216
  7. package/node_modules/@pierre/diffs/dist/components/CodeView.d.ts +4 -4
  8. package/node_modules/@pierre/diffs/dist/components/CodeView.d.ts.map +1 -1
  9. package/node_modules/@pierre/diffs/dist/components/CodeView.js +8 -6
  10. package/node_modules/@pierre/diffs/dist/components/CodeView.js.map +1 -1
  11. package/node_modules/@pierre/diffs/dist/components/File.d.ts +4 -15
  12. package/node_modules/@pierre/diffs/dist/components/File.d.ts.map +1 -1
  13. package/node_modules/@pierre/diffs/dist/components/File.js +4 -0
  14. package/node_modules/@pierre/diffs/dist/components/File.js.map +1 -1
  15. package/node_modules/@pierre/diffs/dist/components/FileDiff.d.ts +10 -37
  16. package/node_modules/@pierre/diffs/dist/components/FileDiff.d.ts.map +1 -1
  17. package/node_modules/@pierre/diffs/dist/components/FileDiff.js +19 -12
  18. package/node_modules/@pierre/diffs/dist/components/FileDiff.js.map +1 -1
  19. package/node_modules/@pierre/diffs/dist/components/FileStream.d.ts +1 -0
  20. package/node_modules/@pierre/diffs/dist/components/FileStream.d.ts.map +1 -1
  21. package/node_modules/@pierre/diffs/dist/components/UnresolvedFile.d.ts +1 -1
  22. package/node_modules/@pierre/diffs/dist/components/UnresolvedFile.d.ts.map +1 -1
  23. package/node_modules/@pierre/diffs/dist/components/UnresolvedFile.js +2 -1
  24. package/node_modules/@pierre/diffs/dist/components/UnresolvedFile.js.map +1 -1
  25. package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.d.ts +2 -8
  26. package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.d.ts.map +1 -1
  27. package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.js +19 -18
  28. package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.js.map +1 -1
  29. package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.d.ts +2 -8
  30. package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  31. package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.js +19 -15
  32. package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.js.map +1 -1
  33. package/node_modules/@pierre/diffs/dist/components/Virtualizer.d.ts +1 -5
  34. package/node_modules/@pierre/diffs/dist/components/Virtualizer.d.ts.map +1 -1
  35. package/node_modules/@pierre/diffs/dist/components/Virtualizer.js.map +1 -1
  36. package/node_modules/@pierre/diffs/dist/components/VirtulizerDevelopment.d.ts +0 -1
  37. package/node_modules/@pierre/diffs/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  38. package/node_modules/@pierre/diffs/dist/components/web-components.d.ts.map +1 -1
  39. package/node_modules/@pierre/diffs/dist/components/web-components.js +2 -1
  40. package/node_modules/@pierre/diffs/dist/components/web-components.js.map +1 -1
  41. package/node_modules/@pierre/diffs/dist/constants.d.ts +0 -1
  42. package/node_modules/@pierre/diffs/dist/constants.d.ts.map +1 -1
  43. package/node_modules/@pierre/diffs/dist/editor/EditStateManager.d.ts +0 -1
  44. package/node_modules/@pierre/diffs/dist/editor/EditStateManager.d.ts.map +1 -1
  45. package/node_modules/@pierre/diffs/dist/editor/EditStateManager.js.map +1 -1
  46. package/node_modules/@pierre/diffs/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts +0 -1
  47. package/node_modules/@pierre/diffs/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts.map +1 -1
  48. package/node_modules/@pierre/diffs/dist/editor/command.d.ts +2 -1
  49. package/node_modules/@pierre/diffs/dist/editor/command.d.ts.map +1 -1
  50. package/node_modules/@pierre/diffs/dist/editor/editPrediction.d.ts +3 -2
  51. package/node_modules/@pierre/diffs/dist/editor/editPrediction.d.ts.map +1 -1
  52. package/node_modules/@pierre/diffs/dist/editor/editPrediction.js +11 -11
  53. package/node_modules/@pierre/diffs/dist/editor/editPrediction.js.map +1 -1
  54. package/node_modules/@pierre/diffs/dist/editor/editStack.d.ts +0 -1
  55. package/node_modules/@pierre/diffs/dist/editor/editStack.d.ts.map +1 -1
  56. package/node_modules/@pierre/diffs/dist/editor/editStack.js.map +1 -1
  57. package/node_modules/@pierre/diffs/dist/editor/editor.d.ts +1 -5
  58. package/node_modules/@pierre/diffs/dist/editor/editor.d.ts.map +1 -1
  59. package/node_modules/@pierre/diffs/dist/editor/editor.js +23 -20
  60. package/node_modules/@pierre/diffs/dist/editor/editor.js.map +1 -1
  61. package/node_modules/@pierre/diffs/dist/editor/editor2.js.map +1 -1
  62. package/node_modules/@pierre/diffs/dist/editor/languages.d.ts +0 -1
  63. package/node_modules/@pierre/diffs/dist/editor/languages.d.ts.map +1 -1
  64. package/node_modules/@pierre/diffs/dist/editor/languages.js +1 -1
  65. package/node_modules/@pierre/diffs/dist/editor/languages.js.map +1 -1
  66. package/node_modules/@pierre/diffs/dist/editor/lineAnnotations.d.ts +0 -1
  67. package/node_modules/@pierre/diffs/dist/editor/lineAnnotations.d.ts.map +1 -1
  68. package/node_modules/@pierre/diffs/dist/editor/lineAnnotations.js +2 -1
  69. package/node_modules/@pierre/diffs/dist/editor/lineAnnotations.js.map +1 -1
  70. package/node_modules/@pierre/diffs/dist/editor/marker.d.ts +0 -1
  71. package/node_modules/@pierre/diffs/dist/editor/marker.d.ts.map +1 -1
  72. package/node_modules/@pierre/diffs/dist/editor/marker.js +5 -3
  73. package/node_modules/@pierre/diffs/dist/editor/marker.js.map +1 -1
  74. package/node_modules/@pierre/diffs/dist/editor/matchBrackets.d.ts +0 -1
  75. package/node_modules/@pierre/diffs/dist/editor/matchBrackets.d.ts.map +1 -1
  76. package/node_modules/@pierre/diffs/dist/editor/pieceTable.d.ts +0 -1
  77. package/node_modules/@pierre/diffs/dist/editor/pieceTable.d.ts.map +1 -1
  78. package/node_modules/@pierre/diffs/dist/editor/pieceTable.js.map +1 -1
  79. package/node_modules/@pierre/diffs/dist/editor/platform.d.ts +1 -5
  80. package/node_modules/@pierre/diffs/dist/editor/platform.d.ts.map +1 -1
  81. package/node_modules/@pierre/diffs/dist/editor/platform.js.map +1 -1
  82. package/node_modules/@pierre/diffs/dist/editor/popover.d.ts +12 -12
  83. package/node_modules/@pierre/diffs/dist/editor/popover.d.ts.map +1 -1
  84. package/node_modules/@pierre/diffs/dist/editor/popover.js.map +1 -1
  85. package/node_modules/@pierre/diffs/dist/editor/searchPanel.d.ts +0 -1
  86. package/node_modules/@pierre/diffs/dist/editor/searchPanel.d.ts.map +1 -1
  87. package/node_modules/@pierre/diffs/dist/editor/searchPanel.js +16 -12
  88. package/node_modules/@pierre/diffs/dist/editor/searchPanel.js.map +1 -1
  89. package/node_modules/@pierre/diffs/dist/editor/selection.d.ts +0 -1
  90. package/node_modules/@pierre/diffs/dist/editor/selection.d.ts.map +1 -1
  91. package/node_modules/@pierre/diffs/dist/editor/selection.js.map +1 -1
  92. package/node_modules/@pierre/diffs/dist/editor/selectionAction.d.ts +0 -1
  93. package/node_modules/@pierre/diffs/dist/editor/selectionAction.d.ts.map +1 -1
  94. package/node_modules/@pierre/diffs/dist/editor/selectionAction.js.map +1 -1
  95. package/node_modules/@pierre/diffs/dist/editor/sprite.d.ts.map +1 -1
  96. package/node_modules/@pierre/diffs/dist/editor/textDocument.d.ts +0 -1
  97. package/node_modules/@pierre/diffs/dist/editor/textDocument.d.ts.map +1 -1
  98. package/node_modules/@pierre/diffs/dist/editor/textDocument.js.map +1 -1
  99. package/node_modules/@pierre/diffs/dist/editor/textDocumentChangeTransaction.d.ts +0 -1
  100. package/node_modules/@pierre/diffs/dist/editor/textDocumentChangeTransaction.d.ts.map +1 -1
  101. package/node_modules/@pierre/diffs/dist/editor/textMeasure.d.ts.map +1 -1
  102. package/node_modules/@pierre/diffs/dist/editor/textMeasure.js +27 -3
  103. package/node_modules/@pierre/diffs/dist/editor/textMeasure.js.map +1 -1
  104. package/node_modules/@pierre/diffs/dist/editor/tokenizer.d.ts +1 -11
  105. package/node_modules/@pierre/diffs/dist/editor/tokenizer.d.ts.map +1 -1
  106. package/node_modules/@pierre/diffs/dist/editor/tokenizer.js +8 -4
  107. package/node_modules/@pierre/diffs/dist/editor/tokenizer.js.map +1 -1
  108. package/node_modules/@pierre/diffs/dist/editor/types.d.ts +0 -1
  109. package/node_modules/@pierre/diffs/dist/editor/types.d.ts.map +1 -1
  110. package/node_modules/@pierre/diffs/dist/editor/utils.d.ts.map +1 -1
  111. package/node_modules/@pierre/diffs/dist/editor/utils.js +11 -7
  112. package/node_modules/@pierre/diffs/dist/editor/utils.js.map +1 -1
  113. package/node_modules/@pierre/diffs/dist/highlighter/languages/areLanguagesAttached.d.ts +0 -1
  114. package/node_modules/@pierre/diffs/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  115. package/node_modules/@pierre/diffs/dist/highlighter/languages/attachResolvedLanguages.d.ts +1 -0
  116. package/node_modules/@pierre/diffs/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  117. package/node_modules/@pierre/diffs/dist/highlighter/languages/attachResolvedLanguages.js +8 -1
  118. package/node_modules/@pierre/diffs/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  119. package/node_modules/@pierre/diffs/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  120. package/node_modules/@pierre/diffs/dist/highlighter/languages/constants.d.ts +1 -1
  121. package/node_modules/@pierre/diffs/dist/highlighter/languages/constants.d.ts.map +1 -1
  122. package/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -0
  123. package/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  124. package/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -0
  125. package/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  126. package/node_modules/@pierre/diffs/dist/highlighter/languages/hasResolvedLanguages.d.ts +0 -1
  127. package/node_modules/@pierre/diffs/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  128. package/node_modules/@pierre/diffs/dist/highlighter/languages/registerCustomLanguage.d.ts +3 -2
  129. package/node_modules/@pierre/diffs/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  130. package/node_modules/@pierre/diffs/dist/highlighter/languages/registerCustomLanguage.js +3 -1
  131. package/node_modules/@pierre/diffs/dist/highlighter/languages/registerCustomLanguage.js.map +1 -1
  132. package/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguage.d.ts +1 -0
  133. package/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  134. package/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguages.d.ts +1 -0
  135. package/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  136. package/node_modules/@pierre/diffs/dist/highlighter/shared_highlighter.d.ts +1 -6
  137. package/node_modules/@pierre/diffs/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  138. package/node_modules/@pierre/diffs/dist/highlighter/themes/areThemesAttached.d.ts +0 -1
  139. package/node_modules/@pierre/diffs/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  140. package/node_modules/@pierre/diffs/dist/highlighter/themes/attachResolvedThemes.d.ts +0 -1
  141. package/node_modules/@pierre/diffs/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  142. package/node_modules/@pierre/diffs/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  143. package/node_modules/@pierre/diffs/dist/highlighter/themes/constants.d.ts.map +1 -1
  144. package/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +0 -1
  145. package/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  146. package/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedThemes.d.ts +0 -1
  147. package/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  148. package/node_modules/@pierre/diffs/dist/highlighter/themes/hasResolvedThemes.d.ts +0 -1
  149. package/node_modules/@pierre/diffs/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  150. package/node_modules/@pierre/diffs/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  151. package/node_modules/@pierre/diffs/dist/highlighter/themes/registerCustomTheme.d.ts +0 -1
  152. package/node_modules/@pierre/diffs/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  153. package/node_modules/@pierre/diffs/dist/highlighter/themes/resolveTheme.d.ts +0 -1
  154. package/node_modules/@pierre/diffs/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  155. package/node_modules/@pierre/diffs/dist/highlighter/themes/resolveThemes.d.ts +0 -1
  156. package/node_modules/@pierre/diffs/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  157. package/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolution.d.ts +0 -1
  158. package/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
  159. package/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolver.d.ts +0 -1
  160. package/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  161. package/node_modules/@pierre/diffs/dist/index.d.ts +1 -0
  162. package/node_modules/@pierre/diffs/dist/managers/InteractionManager.d.ts +2 -26
  163. package/node_modules/@pierre/diffs/dist/managers/InteractionManager.d.ts.map +1 -1
  164. package/node_modules/@pierre/diffs/dist/managers/InteractionManager.js +1 -3
  165. package/node_modules/@pierre/diffs/dist/managers/InteractionManager.js.map +1 -1
  166. package/node_modules/@pierre/diffs/dist/managers/ResizeManager.d.ts +1 -4
  167. package/node_modules/@pierre/diffs/dist/managers/ResizeManager.d.ts.map +1 -1
  168. package/node_modules/@pierre/diffs/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  169. package/node_modules/@pierre/diffs/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  170. package/node_modules/@pierre/diffs/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +0 -1
  171. package/node_modules/@pierre/diffs/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  172. package/node_modules/@pierre/diffs/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts.map +1 -1
  173. package/node_modules/@pierre/diffs/dist/react/CodeView.d.ts +9 -1
  174. package/node_modules/@pierre/diffs/dist/react/CodeView.d.ts.map +1 -1
  175. package/node_modules/@pierre/diffs/dist/react/CodeView.js +39 -33
  176. package/node_modules/@pierre/diffs/dist/react/CodeView.js.map +1 -1
  177. package/node_modules/@pierre/diffs/dist/react/EditContext.d.ts +2 -5
  178. package/node_modules/@pierre/diffs/dist/react/EditContext.d.ts.map +1 -1
  179. package/node_modules/@pierre/diffs/dist/react/File.d.ts +1 -23
  180. package/node_modules/@pierre/diffs/dist/react/File.d.ts.map +1 -1
  181. package/node_modules/@pierre/diffs/dist/react/File.js +13 -12
  182. package/node_modules/@pierre/diffs/dist/react/File.js.map +1 -1
  183. package/node_modules/@pierre/diffs/dist/react/FileDiff.d.ts +1 -23
  184. package/node_modules/@pierre/diffs/dist/react/FileDiff.d.ts.map +1 -1
  185. package/node_modules/@pierre/diffs/dist/react/FileDiff.js +13 -12
  186. package/node_modules/@pierre/diffs/dist/react/FileDiff.js.map +1 -1
  187. package/node_modules/@pierre/diffs/dist/react/MultiFileDiff.d.ts +1 -24
  188. package/node_modules/@pierre/diffs/dist/react/MultiFileDiff.d.ts.map +1 -1
  189. package/node_modules/@pierre/diffs/dist/react/MultiFileDiff.js +13 -12
  190. package/node_modules/@pierre/diffs/dist/react/MultiFileDiff.js.map +1 -1
  191. package/node_modules/@pierre/diffs/dist/react/PatchDiff.d.ts +1 -23
  192. package/node_modules/@pierre/diffs/dist/react/PatchDiff.d.ts.map +1 -1
  193. package/node_modules/@pierre/diffs/dist/react/PatchDiff.js +13 -12
  194. package/node_modules/@pierre/diffs/dist/react/PatchDiff.js.map +1 -1
  195. package/node_modules/@pierre/diffs/dist/react/UnresolvedFile.d.ts +1 -18
  196. package/node_modules/@pierre/diffs/dist/react/UnresolvedFile.d.ts.map +1 -1
  197. package/node_modules/@pierre/diffs/dist/react/UnresolvedFile.js +15 -14
  198. package/node_modules/@pierre/diffs/dist/react/UnresolvedFile.js.map +1 -1
  199. package/node_modules/@pierre/diffs/dist/react/Virtualizer.d.ts +1 -9
  200. package/node_modules/@pierre/diffs/dist/react/Virtualizer.d.ts.map +1 -1
  201. package/node_modules/@pierre/diffs/dist/react/Virtualizer.js.map +1 -1
  202. package/node_modules/@pierre/diffs/dist/react/WorkerPoolContext.d.ts +2 -6
  203. package/node_modules/@pierre/diffs/dist/react/WorkerPoolContext.d.ts.map +1 -1
  204. package/node_modules/@pierre/diffs/dist/react/constants.d.ts +0 -1
  205. package/node_modules/@pierre/diffs/dist/react/constants.d.ts.map +1 -1
  206. package/node_modules/@pierre/diffs/dist/react/jsx.d.ts +1 -0
  207. package/node_modules/@pierre/diffs/dist/react/jsx.d.ts.map +1 -1
  208. package/node_modules/@pierre/diffs/dist/react/types.d.ts +1 -1
  209. package/node_modules/@pierre/diffs/dist/react/types.d.ts.map +1 -1
  210. package/node_modules/@pierre/diffs/dist/react/utils/assignRef.d.ts +6 -0
  211. package/node_modules/@pierre/diffs/dist/react/utils/assignRef.d.ts.map +1 -0
  212. package/node_modules/@pierre/diffs/dist/react/utils/assignRef.js +9 -0
  213. package/node_modules/@pierre/diffs/dist/react/utils/assignRef.js.map +1 -0
  214. package/node_modules/@pierre/diffs/dist/react/utils/renderDiffChildren.d.ts +1 -16
  215. package/node_modules/@pierre/diffs/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  216. package/node_modules/@pierre/diffs/dist/react/utils/renderDiffChildren.js.map +1 -1
  217. package/node_modules/@pierre/diffs/dist/react/utils/renderFileChildren.d.ts +1 -13
  218. package/node_modules/@pierre/diffs/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  219. package/node_modules/@pierre/diffs/dist/react/utils/renderFileChildren.js.map +1 -1
  220. package/node_modules/@pierre/diffs/dist/react/utils/templateRender.d.ts +0 -1
  221. package/node_modules/@pierre/diffs/dist/react/utils/templateRender.d.ts.map +1 -1
  222. package/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.d.ts +2 -18
  223. package/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  224. package/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.js +31 -17
  225. package/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.js.map +1 -1
  226. package/node_modules/@pierre/diffs/dist/react/utils/useFileInstance.d.ts +2 -16
  227. package/node_modules/@pierre/diffs/dist/react/utils/useFileInstance.d.ts.map +1 -1
  228. package/node_modules/@pierre/diffs/dist/react/utils/useFileInstance.js +8 -4
  229. package/node_modules/@pierre/diffs/dist/react/utils/useFileInstance.js.map +1 -1
  230. package/node_modules/@pierre/diffs/dist/react/utils/useStableCallback.d.ts.map +1 -1
  231. package/node_modules/@pierre/diffs/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -12
  232. package/node_modules/@pierre/diffs/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  233. package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.d.ts +4 -9
  234. package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  235. package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.js +28 -21
  236. package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.js.map +1 -1
  237. package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.d.ts +1 -0
  238. package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.d.ts.map +1 -1
  239. package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.js.map +1 -1
  240. package/node_modules/@pierre/diffs/dist/renderers/UnresolvedFileHunksRenderer.d.ts +3 -9
  241. package/node_modules/@pierre/diffs/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  242. package/node_modules/@pierre/diffs/dist/shiki-stream/stream.d.ts +0 -1
  243. package/node_modules/@pierre/diffs/dist/shiki-stream/stream.d.ts.map +1 -1
  244. package/node_modules/@pierre/diffs/dist/shiki-stream/stream.js.map +1 -1
  245. package/node_modules/@pierre/diffs/dist/shiki-stream/tokenizer.d.ts +0 -1
  246. package/node_modules/@pierre/diffs/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  247. package/node_modules/@pierre/diffs/dist/shiki-stream/types.d.ts +0 -1
  248. package/node_modules/@pierre/diffs/dist/shiki-stream/types.d.ts.map +1 -1
  249. package/node_modules/@pierre/diffs/dist/sprite.d.ts.map +1 -1
  250. package/node_modules/@pierre/diffs/dist/ssr/FileDiffReact.d.ts +1 -8
  251. package/node_modules/@pierre/diffs/dist/ssr/FileDiffReact.d.ts.map +1 -1
  252. package/node_modules/@pierre/diffs/dist/ssr/FileDiffReact.js +8 -3
  253. package/node_modules/@pierre/diffs/dist/ssr/FileDiffReact.js.map +1 -1
  254. package/node_modules/@pierre/diffs/dist/ssr/preloadDiffs.d.ts +6 -34
  255. package/node_modules/@pierre/diffs/dist/ssr/preloadDiffs.d.ts.map +1 -1
  256. package/node_modules/@pierre/diffs/dist/ssr/preloadFile.d.ts +1 -6
  257. package/node_modules/@pierre/diffs/dist/ssr/preloadFile.d.ts.map +1 -1
  258. package/node_modules/@pierre/diffs/dist/ssr/preloadPatchFile.d.ts +1 -5
  259. package/node_modules/@pierre/diffs/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  260. package/node_modules/@pierre/diffs/dist/ssr/renderHTML.d.ts +0 -1
  261. package/node_modules/@pierre/diffs/dist/ssr/renderHTML.d.ts.map +1 -1
  262. package/node_modules/@pierre/diffs/dist/string-import.d.ts.map +1 -1
  263. package/node_modules/@pierre/diffs/dist/style.js.map +1 -1
  264. package/node_modules/@pierre/diffs/dist/types.d.ts +0 -1
  265. package/node_modules/@pierre/diffs/dist/types.d.ts.map +1 -1
  266. package/node_modules/@pierre/diffs/dist/utils/annotationHelpers.d.ts +0 -1
  267. package/node_modules/@pierre/diffs/dist/utils/annotationHelpers.d.ts.map +1 -1
  268. package/node_modules/@pierre/diffs/dist/utils/appendItems.d.ts.map +1 -1
  269. package/node_modules/@pierre/diffs/dist/utils/applyLineTextWithNewline.d.ts.map +1 -1
  270. package/node_modules/@pierre/diffs/dist/utils/areDiffLineAnnotationsEqual.d.ts +0 -1
  271. package/node_modules/@pierre/diffs/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  272. package/node_modules/@pierre/diffs/dist/utils/areDiffRenderOptionsEqual.d.ts +0 -1
  273. package/node_modules/@pierre/diffs/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
  274. package/node_modules/@pierre/diffs/dist/utils/areDiffTargetsEqual.d.ts +0 -1
  275. package/node_modules/@pierre/diffs/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
  276. package/node_modules/@pierre/diffs/dist/utils/areFileRenderOptionsEqual.d.ts +0 -1
  277. package/node_modules/@pierre/diffs/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
  278. package/node_modules/@pierre/diffs/dist/utils/areFileTargetsEqual.d.ts +0 -1
  279. package/node_modules/@pierre/diffs/dist/utils/areFileTargetsEqual.d.ts.map +1 -1
  280. package/node_modules/@pierre/diffs/dist/utils/areFilesEqual.d.ts +0 -1
  281. package/node_modules/@pierre/diffs/dist/utils/areFilesEqual.d.ts.map +1 -1
  282. package/node_modules/@pierre/diffs/dist/utils/areHunkDataEqual.d.ts +0 -1
  283. package/node_modules/@pierre/diffs/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  284. package/node_modules/@pierre/diffs/dist/utils/areLineAnnotationsEqual.d.ts +0 -1
  285. package/node_modules/@pierre/diffs/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  286. package/node_modules/@pierre/diffs/dist/utils/areManagedSnapshotsEqual.d.ts +0 -1
  287. package/node_modules/@pierre/diffs/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  288. package/node_modules/@pierre/diffs/dist/utils/areMergeConflictActionsEqual.d.ts +0 -1
  289. package/node_modules/@pierre/diffs/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
  290. package/node_modules/@pierre/diffs/dist/utils/areObjectsEqual.d.ts.map +1 -1
  291. package/node_modules/@pierre/diffs/dist/utils/areOptionsEqual.d.ts +1 -0
  292. package/node_modules/@pierre/diffs/dist/utils/areOptionsEqual.d.ts.map +1 -1
  293. package/node_modules/@pierre/diffs/dist/utils/arePrePropertiesEqual.d.ts +0 -1
  294. package/node_modules/@pierre/diffs/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  295. package/node_modules/@pierre/diffs/dist/utils/areRenderRangesEqual.d.ts +0 -1
  296. package/node_modules/@pierre/diffs/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  297. package/node_modules/@pierre/diffs/dist/utils/areSelectionPointsEqual.d.ts +0 -1
  298. package/node_modules/@pierre/diffs/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
  299. package/node_modules/@pierre/diffs/dist/utils/areSelectionsEqual.d.ts +0 -1
  300. package/node_modules/@pierre/diffs/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  301. package/node_modules/@pierre/diffs/dist/utils/areThemesEqual.d.ts +0 -1
  302. package/node_modules/@pierre/diffs/dist/utils/areThemesEqual.d.ts.map +1 -1
  303. package/node_modules/@pierre/diffs/dist/utils/areVirtualWindowSpecsEqual.d.ts +0 -1
  304. package/node_modules/@pierre/diffs/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  305. package/node_modules/@pierre/diffs/dist/utils/areWorkerStatsEqual.d.ts +1 -0
  306. package/node_modules/@pierre/diffs/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  307. package/node_modules/@pierre/diffs/dist/utils/awaitWithTimeout.d.ts.map +1 -1
  308. package/node_modules/@pierre/diffs/dist/utils/cleanLastNewline.d.ts.map +1 -1
  309. package/node_modules/@pierre/diffs/dist/utils/cloneFileDiffMetadata.d.ts +0 -1
  310. package/node_modules/@pierre/diffs/dist/utils/cloneFileDiffMetadata.d.ts.map +1 -1
  311. package/node_modules/@pierre/diffs/dist/utils/composeCacheKey.d.ts.map +1 -1
  312. package/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.d.ts +1 -11
  313. package/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  314. package/node_modules/@pierre/diffs/dist/utils/computeFileOffsets.d.ts.map +1 -1
  315. package/node_modules/@pierre/diffs/dist/utils/computeFileOffsets.js +9 -8
  316. package/node_modules/@pierre/diffs/dist/utils/computeFileOffsets.js.map +1 -1
  317. package/node_modules/@pierre/diffs/dist/utils/computeVirtualFileMetrics.d.ts +0 -1
  318. package/node_modules/@pierre/diffs/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
  319. package/node_modules/@pierre/diffs/dist/utils/createAnnotationElement.d.ts +0 -1
  320. package/node_modules/@pierre/diffs/dist/utils/createAnnotationElement.d.ts.map +1 -1
  321. package/node_modules/@pierre/diffs/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  322. package/node_modules/@pierre/diffs/dist/utils/createCodeViewHeaderFooterHostElement.d.ts.map +1 -1
  323. package/node_modules/@pierre/diffs/dist/utils/createContentColumn.d.ts +0 -1
  324. package/node_modules/@pierre/diffs/dist/utils/createContentColumn.d.ts.map +1 -1
  325. package/node_modules/@pierre/diffs/dist/utils/createEmptyRowBuffer.d.ts +0 -1
  326. package/node_modules/@pierre/diffs/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  327. package/node_modules/@pierre/diffs/dist/utils/createFileHeaderElement.d.ts +1 -6
  328. package/node_modules/@pierre/diffs/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  329. package/node_modules/@pierre/diffs/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
  330. package/node_modules/@pierre/diffs/dist/utils/createGutterUtilityElement.d.ts +0 -1
  331. package/node_modules/@pierre/diffs/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
  332. package/node_modules/@pierre/diffs/dist/utils/createNoNewlineElement.d.ts +0 -1
  333. package/node_modules/@pierre/diffs/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  334. package/node_modules/@pierre/diffs/dist/utils/createPreElement.d.ts +1 -11
  335. package/node_modules/@pierre/diffs/dist/utils/createPreElement.d.ts.map +1 -1
  336. package/node_modules/@pierre/diffs/dist/utils/createRowNodes.d.ts.map +1 -1
  337. package/node_modules/@pierre/diffs/dist/utils/createSeparator.d.ts +1 -10
  338. package/node_modules/@pierre/diffs/dist/utils/createSeparator.d.ts.map +1 -1
  339. package/node_modules/@pierre/diffs/dist/utils/createSeparator.js +12 -10
  340. package/node_modules/@pierre/diffs/dist/utils/createSeparator.js.map +1 -1
  341. package/node_modules/@pierre/diffs/dist/utils/createSpanNodeFromToken.d.ts +0 -1
  342. package/node_modules/@pierre/diffs/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  343. package/node_modules/@pierre/diffs/dist/utils/createSpanNodeFromToken.js +2 -1
  344. package/node_modules/@pierre/diffs/dist/utils/createSpanNodeFromToken.js.map +1 -1
  345. package/node_modules/@pierre/diffs/dist/utils/createStyleElement.d.ts +0 -1
  346. package/node_modules/@pierre/diffs/dist/utils/createStyleElement.d.ts.map +1 -1
  347. package/node_modules/@pierre/diffs/dist/utils/createTransformerWithState.d.ts +0 -1
  348. package/node_modules/@pierre/diffs/dist/utils/createTransformerWithState.d.ts.map +1 -1
  349. package/node_modules/@pierre/diffs/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  350. package/node_modules/@pierre/diffs/dist/utils/createWindowFromScrollPosition.d.ts +1 -9
  351. package/node_modules/@pierre/diffs/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  352. package/node_modules/@pierre/diffs/dist/utils/cssWrappers.d.ts +0 -1
  353. package/node_modules/@pierre/diffs/dist/utils/cssWrappers.d.ts.map +1 -1
  354. package/node_modules/@pierre/diffs/dist/utils/cssWrappers.js +5 -3
  355. package/node_modules/@pierre/diffs/dist/utils/cssWrappers.js.map +1 -1
  356. package/node_modules/@pierre/diffs/dist/utils/detachString.d.ts.map +1 -1
  357. package/node_modules/@pierre/diffs/dist/utils/diffAcceptRejectHunk.d.ts +0 -1
  358. package/node_modules/@pierre/diffs/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  359. package/node_modules/@pierre/diffs/dist/utils/editSessionAnnotations.d.ts +0 -1
  360. package/node_modules/@pierre/diffs/dist/utils/editSessionAnnotations.d.ts.map +1 -1
  361. package/node_modules/@pierre/diffs/dist/utils/editSessionHunks.d.ts +0 -1
  362. package/node_modules/@pierre/diffs/dist/utils/editSessionHunks.d.ts.map +1 -1
  363. package/node_modules/@pierre/diffs/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  364. package/node_modules/@pierre/diffs/dist/utils/getDiffFileInput.d.ts +1 -5
  365. package/node_modules/@pierre/diffs/dist/utils/getDiffFileInput.d.ts.map +1 -1
  366. package/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.d.ts +0 -1
  367. package/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  368. package/node_modules/@pierre/diffs/dist/utils/getFileRendererOptions.d.ts +0 -1
  369. package/node_modules/@pierre/diffs/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  370. package/node_modules/@pierre/diffs/dist/utils/getFiletypeFromFileName.d.ts +0 -1
  371. package/node_modules/@pierre/diffs/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  372. package/node_modules/@pierre/diffs/dist/utils/getFiletypeFromFileName.js.map +1 -1
  373. package/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.d.ts +1 -5
  374. package/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  375. package/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.js +1 -1
  376. package/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.js.map +1 -1
  377. package/node_modules/@pierre/diffs/dist/utils/getHighlighterThemeStyles.d.ts +1 -6
  378. package/node_modules/@pierre/diffs/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  379. package/node_modules/@pierre/diffs/dist/utils/getHunkSeparatorSlotName.d.ts +0 -1
  380. package/node_modules/@pierre/diffs/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  381. package/node_modules/@pierre/diffs/dist/utils/getHunkSideBoundaries.d.ts.map +1 -1
  382. package/node_modules/@pierre/diffs/dist/utils/getIconForType.d.ts +0 -1
  383. package/node_modules/@pierre/diffs/dist/utils/getIconForType.d.ts.map +1 -1
  384. package/node_modules/@pierre/diffs/dist/utils/getLineAnnotationName.d.ts +0 -1
  385. package/node_modules/@pierre/diffs/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  386. package/node_modules/@pierre/diffs/dist/utils/getLineEndingType.d.ts.map +1 -1
  387. package/node_modules/@pierre/diffs/dist/utils/getLineNodes.d.ts +0 -1
  388. package/node_modules/@pierre/diffs/dist/utils/getLineNodes.d.ts.map +1 -1
  389. package/node_modules/@pierre/diffs/dist/utils/getMergeConflictActionSlotName.d.ts +1 -5
  390. package/node_modules/@pierre/diffs/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
  391. package/node_modules/@pierre/diffs/dist/utils/getMergeConflictLineTypes.d.ts +0 -1
  392. package/node_modules/@pierre/diffs/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
  393. package/node_modules/@pierre/diffs/dist/utils/getOrCreateCodeNode.d.ts +1 -7
  394. package/node_modules/@pierre/diffs/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  395. package/node_modules/@pierre/diffs/dist/utils/getSingularPatch.d.ts +0 -1
  396. package/node_modules/@pierre/diffs/dist/utils/getSingularPatch.d.ts.map +1 -1
  397. package/node_modules/@pierre/diffs/dist/utils/getThemes.d.ts +0 -1
  398. package/node_modules/@pierre/diffs/dist/utils/getThemes.d.ts.map +1 -1
  399. package/node_modules/@pierre/diffs/dist/utils/getTotalLineCountFromHunks.d.ts +0 -1
  400. package/node_modules/@pierre/diffs/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  401. package/node_modules/@pierre/diffs/dist/utils/guardWebKitScrollDuringRebuild.d.ts.map +1 -1
  402. package/node_modules/@pierre/diffs/dist/utils/hast_utils.d.ts +2 -12
  403. package/node_modules/@pierre/diffs/dist/utils/hast_utils.d.ts.map +1 -1
  404. package/node_modules/@pierre/diffs/dist/utils/hostTheme.d.ts +1 -5
  405. package/node_modules/@pierre/diffs/dist/utils/hostTheme.d.ts.map +1 -1
  406. package/node_modules/@pierre/diffs/dist/utils/hydratePartialDiff.d.ts +0 -1
  407. package/node_modules/@pierre/diffs/dist/utils/hydratePartialDiff.d.ts.map +1 -1
  408. package/node_modules/@pierre/diffs/dist/utils/includesFileAnnotations.d.ts +0 -1
  409. package/node_modules/@pierre/diffs/dist/utils/includesFileAnnotations.d.ts.map +1 -1
  410. package/node_modules/@pierre/diffs/dist/utils/isDefaultRenderRange.d.ts +0 -1
  411. package/node_modules/@pierre/diffs/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  412. package/node_modules/@pierre/diffs/dist/utils/isDiffPlainText.d.ts +0 -1
  413. package/node_modules/@pierre/diffs/dist/utils/isDiffPlainText.d.ts.map +1 -1
  414. package/node_modules/@pierre/diffs/dist/utils/isFilePlainText.d.ts +0 -1
  415. package/node_modules/@pierre/diffs/dist/utils/isFilePlainText.d.ts.map +1 -1
  416. package/node_modules/@pierre/diffs/dist/utils/isGutterUtilityPath.d.ts.map +1 -1
  417. package/node_modules/@pierre/diffs/dist/utils/isStyleNode.d.ts.map +1 -1
  418. package/node_modules/@pierre/diffs/dist/utils/isWorkerContext.d.ts.map +1 -1
  419. package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.d.ts +1 -10
  420. package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.d.ts.map +1 -1
  421. package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.js +5 -3
  422. package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.js.map +1 -1
  423. package/node_modules/@pierre/diffs/dist/utils/lineAnnotationIdentity.d.ts +0 -1
  424. package/node_modules/@pierre/diffs/dist/utils/lineAnnotationIdentity.d.ts.map +1 -1
  425. package/node_modules/@pierre/diffs/dist/utils/normalizeDiffResolution.d.ts +0 -1
  426. package/node_modules/@pierre/diffs/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
  427. package/node_modules/@pierre/diffs/dist/utils/parseDiffDecorations.d.ts +2 -13
  428. package/node_modules/@pierre/diffs/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  429. package/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.d.ts +0 -1
  430. package/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  431. package/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.js +2 -1
  432. package/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.js.map +1 -1
  433. package/node_modules/@pierre/diffs/dist/utils/parseLineType.d.ts +0 -1
  434. package/node_modules/@pierre/diffs/dist/utils/parseLineType.d.ts.map +1 -1
  435. package/node_modules/@pierre/diffs/dist/utils/parseMergeConflictDiffFromFile.d.ts +0 -1
  436. package/node_modules/@pierre/diffs/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  437. package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.d.ts +0 -1
  438. package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.d.ts.map +1 -1
  439. package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.js +8 -5
  440. package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.js.map +1 -1
  441. package/node_modules/@pierre/diffs/dist/utils/platform.d.ts.map +1 -1
  442. package/node_modules/@pierre/diffs/dist/utils/prefersReducedMotion.d.ts.map +1 -1
  443. package/node_modules/@pierre/diffs/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  444. package/node_modules/@pierre/diffs/dist/utils/processLine.d.ts +0 -1
  445. package/node_modules/@pierre/diffs/dist/utils/processLine.d.ts.map +1 -1
  446. package/node_modules/@pierre/diffs/dist/utils/realignChangeContent.d.ts +0 -1
  447. package/node_modules/@pierre/diffs/dist/utils/realignChangeContent.d.ts.map +1 -1
  448. package/node_modules/@pierre/diffs/dist/utils/renderDiffWithHighlighter.d.ts +1 -8
  449. package/node_modules/@pierre/diffs/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  450. package/node_modules/@pierre/diffs/dist/utils/renderFileWithHighlighter.d.ts +1 -11
  451. package/node_modules/@pierre/diffs/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  452. package/node_modules/@pierre/diffs/dist/utils/resolveConflict.d.ts +0 -1
  453. package/node_modules/@pierre/diffs/dist/utils/resolveConflict.d.ts.map +1 -1
  454. package/node_modules/@pierre/diffs/dist/utils/resolveRegion.d.ts +0 -1
  455. package/node_modules/@pierre/diffs/dist/utils/resolveRegion.d.ts.map +1 -1
  456. package/node_modules/@pierre/diffs/dist/utils/roundToDevicePixel.d.ts.map +1 -1
  457. package/node_modules/@pierre/diffs/dist/utils/scrollbarGutter.d.ts.map +1 -1
  458. package/node_modules/@pierre/diffs/dist/utils/scrollbarGutter.js +2 -1
  459. package/node_modules/@pierre/diffs/dist/utils/scrollbarGutter.js.map +1 -1
  460. package/node_modules/@pierre/diffs/dist/utils/setLanguageOverride.d.ts +0 -1
  461. package/node_modules/@pierre/diffs/dist/utils/setLanguageOverride.d.ts.map +1 -1
  462. package/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.d.ts +1 -11
  463. package/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  464. package/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.js +1 -3
  465. package/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.js.map +1 -1
  466. package/node_modules/@pierre/diffs/dist/utils/shouldUseTokenTransformer.d.ts +0 -1
  467. package/node_modules/@pierre/diffs/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  468. package/node_modules/@pierre/diffs/dist/utils/splitFileContents.d.ts.map +1 -1
  469. package/node_modules/@pierre/diffs/dist/utils/trimPatchContext.d.ts.map +1 -1
  470. package/node_modules/@pierre/diffs/dist/utils/updateDiffHunks.d.ts +0 -1
  471. package/node_modules/@pierre/diffs/dist/utils/updateDiffHunks.d.ts.map +1 -1
  472. package/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.d.ts +10 -55
  473. package/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  474. package/node_modules/@pierre/diffs/dist/utils/wrapTokenFragments.d.ts +0 -1
  475. package/node_modules/@pierre/diffs/dist/utils/wrapTokenFragments.d.ts.map +1 -1
  476. package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.d.ts +2 -17
  477. package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  478. package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.js +48 -43
  479. package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.js.map +1 -1
  480. package/node_modules/@pierre/diffs/dist/worker/getOrCreateWorkerPoolSingleton.d.ts +1 -5
  481. package/node_modules/@pierre/diffs/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  482. package/node_modules/@pierre/diffs/dist/worker/types.d.ts +0 -1
  483. package/node_modules/@pierre/diffs/dist/worker/types.d.ts.map +1 -1
  484. package/node_modules/@pierre/diffs/dist/worker/worker-portable.d.ts +1 -1
  485. package/node_modules/@pierre/diffs/dist/worker/worker-portable.js +121 -355
  486. package/node_modules/@pierre/diffs/dist/worker/worker-portable.js.map +1 -1
  487. package/node_modules/@pierre/diffs/dist/worker/worker.d.ts +1 -1
  488. package/node_modules/@pierre/diffs/dist/worker/worker.js +22 -12
  489. package/node_modules/@pierre/diffs/dist/worker/worker.js.map +1 -1
  490. package/node_modules/@pierre/diffs/package.json +4 -5
  491. package/node_modules/typebox/build/compile/code.mjs +1 -2
  492. package/node_modules/typebox/build/compile/validator.mjs +5 -1
  493. package/node_modules/typebox/build/format/iri.mjs +16 -9
  494. package/node_modules/typebox/build/guard/emit.mjs +2 -2
  495. package/node_modules/typebox/build/guard/guard.d.mts +7 -5
  496. package/node_modules/typebox/build/guard/guard.mjs +14 -9
  497. package/node_modules/typebox/build/guard/index.mjs +6 -0
  498. package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
  499. package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
  500. package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
  501. package/node_modules/typebox/build/schema/build.mjs +2 -3
  502. package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
  503. package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
  504. package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
  505. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
  506. package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
  507. package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
  508. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
  509. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
  510. package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
  511. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
  512. package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
  513. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
  514. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
  515. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
  516. package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
  517. package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
  518. package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
  519. package/node_modules/typebox/build/schema/parse.mjs +3 -0
  520. package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
  521. package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
  522. package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
  523. package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
  524. package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
  525. package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
  526. package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
  527. package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
  528. package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
  529. package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
  530. package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
  531. package/node_modules/typebox/package.json +1 -1
  532. package/node_modules/typebox/readme.md +3 -1
  533. package/node_modules/zod/README.md +2 -2
  534. package/node_modules/zod/compile.cjs +19 -0
  535. package/node_modules/zod/index.cjs +19 -0
  536. package/node_modules/zod/locales/index.cjs +19 -0
  537. package/node_modules/zod/mini/index.cjs +19 -0
  538. package/node_modules/zod/package.json +8 -7
  539. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  540. package/node_modules/zod/src/v4/classic/external.ts +2 -0
  541. package/node_modules/zod/src/v4/classic/from-json-schema.ts +248 -25
  542. package/node_modules/zod/src/v4/classic/schemas.ts +243 -168
  543. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +60 -9
  544. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +6 -0
  545. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
  546. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +265 -0
  547. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
  548. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +9 -0
  549. package/node_modules/zod/src/v4/classic/tests/error.test.ts +130 -1
  550. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +157 -0
  551. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  552. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +40 -2
  553. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +27 -7
  554. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +88 -56
  555. package/node_modules/zod/src/v4/classic/tests/number.test.ts +39 -0
  556. package/node_modules/zod/src/v4/classic/tests/object.test.ts +56 -0
  557. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +3 -2
  558. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  559. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  560. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +46 -1
  561. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  562. package/node_modules/zod/src/v4/classic/tests/string.test.ts +95 -1
  563. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +33 -1
  564. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +234 -38
  565. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +569 -0
  566. package/node_modules/zod/src/v4/core/api.ts +44 -28
  567. package/node_modules/zod/src/v4/core/checks.ts +62 -102
  568. package/node_modules/zod/src/v4/core/compile.ts +218 -93
  569. package/node_modules/zod/src/v4/core/core.ts +1 -3
  570. package/node_modules/zod/src/v4/core/doc.ts +6 -2
  571. package/node_modules/zod/src/v4/core/errors.ts +3 -6
  572. package/node_modules/zod/src/v4/core/json-schema-generator.ts +2 -2
  573. package/node_modules/zod/src/v4/core/json-schema-processors.ts +185 -81
  574. package/node_modules/zod/src/v4/core/memoizer.ts +75 -28
  575. package/node_modules/zod/src/v4/core/parse.ts +37 -16
  576. package/node_modules/zod/src/v4/core/regexes.ts +14 -4
  577. package/node_modules/zod/src/v4/core/schemas.ts +296 -132
  578. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  579. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +35 -0
  580. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  581. package/node_modules/zod/src/v4/core/tests/compile.test.ts +399 -2
  582. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  583. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  584. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  585. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +118 -16
  586. package/node_modules/zod/src/v4/core/to-json-schema.ts +9 -7
  587. package/node_modules/zod/src/v4/core/util.ts +218 -147
  588. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  589. package/node_modules/zod/src/v4/locales/ar.ts +2 -0
  590. package/node_modules/zod/src/v4/locales/az.ts +2 -0
  591. package/node_modules/zod/src/v4/locales/be.ts +2 -0
  592. package/node_modules/zod/src/v4/locales/bg.ts +2 -0
  593. package/node_modules/zod/src/v4/locales/bn.ts +2 -0
  594. package/node_modules/zod/src/v4/locales/ca.ts +2 -0
  595. package/node_modules/zod/src/v4/locales/ckb.ts +2 -0
  596. package/node_modules/zod/src/v4/locales/cs.ts +2 -0
  597. package/node_modules/zod/src/v4/locales/da.ts +2 -0
  598. package/node_modules/zod/src/v4/locales/de.ts +2 -0
  599. package/node_modules/zod/src/v4/locales/el.ts +2 -0
  600. package/node_modules/zod/src/v4/locales/en.ts +2 -0
  601. package/node_modules/zod/src/v4/locales/eo.ts +2 -0
  602. package/node_modules/zod/src/v4/locales/es.ts +2 -0
  603. package/node_modules/zod/src/v4/locales/fa.ts +2 -0
  604. package/node_modules/zod/src/v4/locales/fi.ts +2 -0
  605. package/node_modules/zod/src/v4/locales/fr-CA.ts +2 -0
  606. package/node_modules/zod/src/v4/locales/fr.ts +2 -0
  607. package/node_modules/zod/src/v4/locales/gu.ts +2 -0
  608. package/node_modules/zod/src/v4/locales/he.ts +2 -0
  609. package/node_modules/zod/src/v4/locales/hi.ts +2 -0
  610. package/node_modules/zod/src/v4/locales/hr.ts +2 -0
  611. package/node_modules/zod/src/v4/locales/hu.ts +2 -0
  612. package/node_modules/zod/src/v4/locales/hy.ts +2 -0
  613. package/node_modules/zod/src/v4/locales/id.ts +2 -0
  614. package/node_modules/zod/src/v4/locales/index.ts +1 -0
  615. package/node_modules/zod/src/v4/locales/is.ts +2 -0
  616. package/node_modules/zod/src/v4/locales/it.ts +2 -0
  617. package/node_modules/zod/src/v4/locales/ja.ts +2 -0
  618. package/node_modules/zod/src/v4/locales/ka.ts +2 -0
  619. package/node_modules/zod/src/v4/locales/km.ts +2 -0
  620. package/node_modules/zod/src/v4/locales/kn.ts +2 -0
  621. package/node_modules/zod/src/v4/locales/ko.ts +2 -0
  622. package/node_modules/zod/src/v4/locales/lt.ts +2 -0
  623. package/node_modules/zod/src/v4/locales/mk.ts +2 -0
  624. package/node_modules/zod/src/v4/locales/ms.ts +2 -0
  625. package/node_modules/zod/src/v4/locales/ne.ts +2 -0
  626. package/node_modules/zod/src/v4/locales/nl.ts +2 -0
  627. package/node_modules/zod/src/v4/locales/nn.ts +2 -0
  628. package/node_modules/zod/src/v4/locales/no.ts +2 -0
  629. package/node_modules/zod/src/v4/locales/ota.ts +2 -0
  630. package/node_modules/zod/src/v4/locales/pl.ts +2 -0
  631. package/node_modules/zod/src/v4/locales/ps.ts +2 -0
  632. package/node_modules/zod/src/v4/locales/pt-BR.ts +2 -0
  633. package/node_modules/zod/src/v4/locales/pt.ts +2 -0
  634. package/node_modules/zod/src/v4/locales/ro.ts +2 -0
  635. package/node_modules/zod/src/v4/locales/ru.ts +2 -0
  636. package/node_modules/zod/src/v4/locales/sk.ts +2 -0
  637. package/node_modules/zod/src/v4/locales/sl.ts +2 -0
  638. package/node_modules/zod/src/v4/locales/sv.ts +2 -0
  639. package/node_modules/zod/src/v4/locales/ta.ts +2 -0
  640. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  641. package/node_modules/zod/src/v4/locales/th.ts +2 -0
  642. package/node_modules/zod/src/v4/locales/tk.ts +2 -0
  643. package/node_modules/zod/src/v4/locales/tr.ts +2 -0
  644. package/node_modules/zod/src/v4/locales/uk.ts +2 -0
  645. package/node_modules/zod/src/v4/locales/ur.ts +2 -0
  646. package/node_modules/zod/src/v4/locales/uz.ts +2 -0
  647. package/node_modules/zod/src/v4/locales/vi.ts +2 -0
  648. package/node_modules/zod/src/v4/locales/yo.ts +2 -0
  649. package/node_modules/zod/src/v4/locales/zh-CN.ts +2 -0
  650. package/node_modules/zod/src/v4/locales/zh-TW.ts +2 -0
  651. package/node_modules/zod/src/v4/mini/external.ts +2 -0
  652. package/node_modules/zod/src/v4/mini/schemas.ts +32 -7
  653. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +1 -1
  654. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  655. package/node_modules/zod/src/v4/mini/tests/index.test.ts +86 -0
  656. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  657. package/node_modules/zod/src/v4/mini/tests/string.test.ts +23 -0
  658. package/node_modules/zod/v3/ZodError.cjs +19 -0
  659. package/node_modules/zod/v3/errors.cjs +19 -0
  660. package/node_modules/zod/v3/external.cjs +19 -0
  661. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  662. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  663. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  664. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  665. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  666. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  667. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  668. package/node_modules/zod/v3/index.cjs +19 -0
  669. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  670. package/node_modules/zod/v3/types.cjs +19 -0
  671. package/node_modules/zod/v4/classic/checks.cjs +19 -0
  672. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  673. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  674. package/node_modules/zod/v4/classic/deep-partial.cjs +19 -0
  675. package/node_modules/zod/v4/classic/errors.cjs +19 -0
  676. package/node_modules/zod/v4/classic/external.cjs +22 -1
  677. package/node_modules/zod/v4/classic/external.d.cts +1 -1
  678. package/node_modules/zod/v4/classic/external.d.ts +1 -1
  679. package/node_modules/zod/v4/classic/external.js +1 -1
  680. package/node_modules/zod/v4/classic/from-json-schema.cjs +264 -24
  681. package/node_modules/zod/v4/classic/from-json-schema.js +245 -24
  682. package/node_modules/zod/v4/classic/in-out.cjs +19 -0
  683. package/node_modules/zod/v4/classic/index.cjs +19 -0
  684. package/node_modules/zod/v4/classic/iso.cjs +19 -0
  685. package/node_modules/zod/v4/classic/parse.cjs +19 -0
  686. package/node_modules/zod/v4/classic/schemas.cjs +100 -35
  687. package/node_modules/zod/v4/classic/schemas.d.cts +15 -1
  688. package/node_modules/zod/v4/classic/schemas.d.ts +15 -1
  689. package/node_modules/zod/v4/classic/schemas.js +77 -33
  690. package/node_modules/zod/v4/core/api.cjs +45 -22
  691. package/node_modules/zod/v4/core/api.d.cts +12 -6
  692. package/node_modules/zod/v4/core/api.d.ts +12 -6
  693. package/node_modules/zod/v4/core/api.js +25 -22
  694. package/node_modules/zod/v4/core/checks.cjs +51 -97
  695. package/node_modules/zod/v4/core/checks.d.cts +17 -1
  696. package/node_modules/zod/v4/core/checks.d.ts +17 -1
  697. package/node_modules/zod/v4/core/checks.js +31 -96
  698. package/node_modules/zod/v4/core/compile.cjs +173 -78
  699. package/node_modules/zod/v4/core/compile.d.cts +18 -4
  700. package/node_modules/zod/v4/core/compile.d.ts +18 -4
  701. package/node_modules/zod/v4/core/compile.js +154 -79
  702. package/node_modules/zod/v4/core/core.cjs +20 -1
  703. package/node_modules/zod/v4/core/core.js +1 -1
  704. package/node_modules/zod/v4/core/doc.cjs +26 -2
  705. package/node_modules/zod/v4/core/doc.js +7 -2
  706. package/node_modules/zod/v4/core/errors.cjs +21 -5
  707. package/node_modules/zod/v4/core/errors.js +2 -5
  708. package/node_modules/zod/v4/core/index.cjs +19 -0
  709. package/node_modules/zod/v4/core/json-schema-generator.cjs +20 -1
  710. package/node_modules/zod/v4/core/json-schema-generator.js +2 -2
  711. package/node_modules/zod/v4/core/json-schema-processors.cjs +188 -72
  712. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  713. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  714. package/node_modules/zod/v4/core/json-schema-processors.js +170 -74
  715. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  716. package/node_modules/zod/v4/core/memoizer.cjs +111 -23
  717. package/node_modules/zod/v4/core/memoizer.js +69 -23
  718. package/node_modules/zod/v4/core/parse.cjs +56 -16
  719. package/node_modules/zod/v4/core/parse.js +37 -16
  720. package/node_modules/zod/v4/core/regexes.cjs +31 -6
  721. package/node_modules/zod/v4/core/regexes.d.cts +3 -0
  722. package/node_modules/zod/v4/core/regexes.d.ts +3 -0
  723. package/node_modules/zod/v4/core/regexes.js +10 -4
  724. package/node_modules/zod/v4/core/registries.cjs +19 -0
  725. package/node_modules/zod/v4/core/schemas.cjs +302 -114
  726. package/node_modules/zod/v4/core/schemas.d.cts +28 -8
  727. package/node_modules/zod/v4/core/schemas.d.ts +28 -8
  728. package/node_modules/zod/v4/core/schemas.js +279 -113
  729. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  730. package/node_modules/zod/v4/core/to-json-schema.cjs +28 -7
  731. package/node_modules/zod/v4/core/to-json-schema.d.cts +4 -3
  732. package/node_modules/zod/v4/core/to-json-schema.d.ts +4 -3
  733. package/node_modules/zod/v4/core/to-json-schema.js +7 -6
  734. package/node_modules/zod/v4/core/util.cjs +177 -143
  735. package/node_modules/zod/v4/core/util.d.cts +25 -4
  736. package/node_modules/zod/v4/core/util.d.ts +25 -4
  737. package/node_modules/zod/v4/core/util.js +156 -143
  738. package/node_modules/zod/v4/core/versions.cjs +21 -2
  739. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  740. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  741. package/node_modules/zod/v4/core/versions.js +2 -2
  742. package/node_modules/zod/v4/core/visit.cjs +19 -0
  743. package/node_modules/zod/v4/index.cjs +19 -0
  744. package/node_modules/zod/v4/locales/ar.cjs +2 -0
  745. package/node_modules/zod/v4/locales/ar.js +2 -0
  746. package/node_modules/zod/v4/locales/az.cjs +2 -0
  747. package/node_modules/zod/v4/locales/az.js +2 -0
  748. package/node_modules/zod/v4/locales/be.cjs +2 -0
  749. package/node_modules/zod/v4/locales/be.js +2 -0
  750. package/node_modules/zod/v4/locales/bg.cjs +2 -0
  751. package/node_modules/zod/v4/locales/bg.js +2 -0
  752. package/node_modules/zod/v4/locales/bn.cjs +2 -0
  753. package/node_modules/zod/v4/locales/bn.js +2 -0
  754. package/node_modules/zod/v4/locales/ca.cjs +2 -0
  755. package/node_modules/zod/v4/locales/ca.js +2 -0
  756. package/node_modules/zod/v4/locales/ckb.cjs +2 -0
  757. package/node_modules/zod/v4/locales/ckb.js +2 -0
  758. package/node_modules/zod/v4/locales/cs.cjs +2 -0
  759. package/node_modules/zod/v4/locales/cs.js +2 -0
  760. package/node_modules/zod/v4/locales/da.cjs +2 -0
  761. package/node_modules/zod/v4/locales/da.js +2 -0
  762. package/node_modules/zod/v4/locales/de.cjs +2 -0
  763. package/node_modules/zod/v4/locales/de.js +2 -0
  764. package/node_modules/zod/v4/locales/el.cjs +2 -0
  765. package/node_modules/zod/v4/locales/el.js +2 -0
  766. package/node_modules/zod/v4/locales/en.cjs +2 -0
  767. package/node_modules/zod/v4/locales/en.js +2 -0
  768. package/node_modules/zod/v4/locales/eo.cjs +2 -0
  769. package/node_modules/zod/v4/locales/eo.js +2 -0
  770. package/node_modules/zod/v4/locales/es.cjs +2 -0
  771. package/node_modules/zod/v4/locales/es.js +2 -0
  772. package/node_modules/zod/v4/locales/fa.cjs +2 -0
  773. package/node_modules/zod/v4/locales/fa.js +2 -0
  774. package/node_modules/zod/v4/locales/fi.cjs +2 -0
  775. package/node_modules/zod/v4/locales/fi.js +2 -0
  776. package/node_modules/zod/v4/locales/fr-CA.cjs +2 -0
  777. package/node_modules/zod/v4/locales/fr-CA.js +2 -0
  778. package/node_modules/zod/v4/locales/fr.cjs +2 -0
  779. package/node_modules/zod/v4/locales/fr.js +2 -0
  780. package/node_modules/zod/v4/locales/gu.cjs +2 -0
  781. package/node_modules/zod/v4/locales/gu.js +2 -0
  782. package/node_modules/zod/v4/locales/he.cjs +2 -0
  783. package/node_modules/zod/v4/locales/he.js +2 -0
  784. package/node_modules/zod/v4/locales/hi.cjs +2 -0
  785. package/node_modules/zod/v4/locales/hi.js +2 -0
  786. package/node_modules/zod/v4/locales/hr.cjs +2 -0
  787. package/node_modules/zod/v4/locales/hr.js +2 -0
  788. package/node_modules/zod/v4/locales/hu.cjs +2 -0
  789. package/node_modules/zod/v4/locales/hu.js +2 -0
  790. package/node_modules/zod/v4/locales/hy.cjs +2 -0
  791. package/node_modules/zod/v4/locales/hy.js +2 -0
  792. package/node_modules/zod/v4/locales/id.cjs +2 -0
  793. package/node_modules/zod/v4/locales/id.js +2 -0
  794. package/node_modules/zod/v4/locales/index.cjs +22 -1
  795. package/node_modules/zod/v4/locales/index.d.cts +1 -0
  796. package/node_modules/zod/v4/locales/index.d.ts +1 -0
  797. package/node_modules/zod/v4/locales/index.js +1 -0
  798. package/node_modules/zod/v4/locales/is.cjs +2 -0
  799. package/node_modules/zod/v4/locales/is.js +2 -0
  800. package/node_modules/zod/v4/locales/it.cjs +2 -0
  801. package/node_modules/zod/v4/locales/it.js +2 -0
  802. package/node_modules/zod/v4/locales/ja.cjs +2 -0
  803. package/node_modules/zod/v4/locales/ja.js +2 -0
  804. package/node_modules/zod/v4/locales/ka.cjs +2 -0
  805. package/node_modules/zod/v4/locales/ka.js +2 -0
  806. package/node_modules/zod/v4/locales/km.cjs +2 -0
  807. package/node_modules/zod/v4/locales/km.js +2 -0
  808. package/node_modules/zod/v4/locales/kn.cjs +2 -0
  809. package/node_modules/zod/v4/locales/kn.js +2 -0
  810. package/node_modules/zod/v4/locales/ko.cjs +2 -0
  811. package/node_modules/zod/v4/locales/ko.js +2 -0
  812. package/node_modules/zod/v4/locales/lt.cjs +2 -0
  813. package/node_modules/zod/v4/locales/lt.js +2 -0
  814. package/node_modules/zod/v4/locales/mk.cjs +2 -0
  815. package/node_modules/zod/v4/locales/mk.js +2 -0
  816. package/node_modules/zod/v4/locales/ms.cjs +2 -0
  817. package/node_modules/zod/v4/locales/ms.js +2 -0
  818. package/node_modules/zod/v4/locales/ne.cjs +2 -0
  819. package/node_modules/zod/v4/locales/ne.js +2 -0
  820. package/node_modules/zod/v4/locales/nl.cjs +2 -0
  821. package/node_modules/zod/v4/locales/nl.js +2 -0
  822. package/node_modules/zod/v4/locales/nn.cjs +2 -0
  823. package/node_modules/zod/v4/locales/nn.js +2 -0
  824. package/node_modules/zod/v4/locales/no.cjs +2 -0
  825. package/node_modules/zod/v4/locales/no.js +2 -0
  826. package/node_modules/zod/v4/locales/ota.cjs +2 -0
  827. package/node_modules/zod/v4/locales/ota.js +2 -0
  828. package/node_modules/zod/v4/locales/pl.cjs +2 -0
  829. package/node_modules/zod/v4/locales/pl.js +2 -0
  830. package/node_modules/zod/v4/locales/ps.cjs +2 -0
  831. package/node_modules/zod/v4/locales/ps.js +2 -0
  832. package/node_modules/zod/v4/locales/pt-BR.cjs +2 -0
  833. package/node_modules/zod/v4/locales/pt-BR.js +2 -0
  834. package/node_modules/zod/v4/locales/pt.cjs +2 -0
  835. package/node_modules/zod/v4/locales/pt.js +2 -0
  836. package/node_modules/zod/v4/locales/ro.cjs +2 -0
  837. package/node_modules/zod/v4/locales/ro.js +2 -0
  838. package/node_modules/zod/v4/locales/ru.cjs +2 -0
  839. package/node_modules/zod/v4/locales/ru.js +2 -0
  840. package/node_modules/zod/v4/locales/sk.cjs +2 -0
  841. package/node_modules/zod/v4/locales/sk.js +2 -0
  842. package/node_modules/zod/v4/locales/sl.cjs +2 -0
  843. package/node_modules/zod/v4/locales/sl.js +2 -0
  844. package/node_modules/zod/v4/locales/sv.cjs +2 -0
  845. package/node_modules/zod/v4/locales/sv.js +2 -0
  846. package/node_modules/zod/v4/locales/ta.cjs +2 -0
  847. package/node_modules/zod/v4/locales/ta.js +2 -0
  848. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  849. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  850. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  851. package/node_modules/zod/v4/locales/tg.js +117 -0
  852. package/node_modules/zod/v4/locales/th.cjs +2 -0
  853. package/node_modules/zod/v4/locales/th.js +2 -0
  854. package/node_modules/zod/v4/locales/tk.cjs +2 -0
  855. package/node_modules/zod/v4/locales/tk.js +2 -0
  856. package/node_modules/zod/v4/locales/tr.cjs +2 -0
  857. package/node_modules/zod/v4/locales/tr.js +2 -0
  858. package/node_modules/zod/v4/locales/uk.cjs +2 -0
  859. package/node_modules/zod/v4/locales/uk.js +2 -0
  860. package/node_modules/zod/v4/locales/ur.cjs +2 -0
  861. package/node_modules/zod/v4/locales/ur.js +2 -0
  862. package/node_modules/zod/v4/locales/uz.cjs +2 -0
  863. package/node_modules/zod/v4/locales/uz.js +2 -0
  864. package/node_modules/zod/v4/locales/vi.cjs +2 -0
  865. package/node_modules/zod/v4/locales/vi.js +2 -0
  866. package/node_modules/zod/v4/locales/yo.cjs +2 -0
  867. package/node_modules/zod/v4/locales/yo.js +2 -0
  868. package/node_modules/zod/v4/locales/zh-CN.cjs +2 -0
  869. package/node_modules/zod/v4/locales/zh-CN.js +2 -0
  870. package/node_modules/zod/v4/locales/zh-TW.cjs +2 -0
  871. package/node_modules/zod/v4/locales/zh-TW.js +2 -0
  872. package/node_modules/zod/v4/mini/checks.cjs +19 -0
  873. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  874. package/node_modules/zod/v4/mini/deep-partial.cjs +19 -0
  875. package/node_modules/zod/v4/mini/external.cjs +22 -1
  876. package/node_modules/zod/v4/mini/external.d.cts +1 -1
  877. package/node_modules/zod/v4/mini/external.d.ts +1 -1
  878. package/node_modules/zod/v4/mini/external.js +1 -1
  879. package/node_modules/zod/v4/mini/in-out.cjs +19 -0
  880. package/node_modules/zod/v4/mini/index.cjs +19 -0
  881. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  882. package/node_modules/zod/v4/mini/parse.cjs +19 -0
  883. package/node_modules/zod/v4/mini/schemas.cjs +44 -8
  884. package/node_modules/zod/v4/mini/schemas.d.cts +6 -1
  885. package/node_modules/zod/v4/mini/schemas.d.ts +6 -1
  886. package/node_modules/zod/v4/mini/schemas.js +21 -6
  887. package/node_modules/zod/v4-mini/index.cjs +19 -0
  888. package/openclaw.plugin.json +4 -2
  889. package/package.json +7 -7
  890. package/dist/api.js +0 -3
  891. package/dist/runtime-api.js +0 -2
  892. /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"tokenizer.js","names":["#isCleanedUp","#textDocument","#grammar","#highlighter","#ensureActiveTheme","#scheduleStatePrebuild","#tokenizerId","#backgroundJobId","#backgroundPrebuildEndLine","#backgroundPrebuild","#backgroundTokenize","#themeType","#matchBrackets","#ensureGrammar","#bracketIgnoredRanges","#buildStateStack","#stateStack","#tokenizeLineAt","#mediaQueryList","#resolveSystemThemeType","#emitThemeChange","#disposes","#tokenizeMaxLineLength","#setStyle","#onDeferTokenize","#onThemeChange","#debug","#colorMap","#setTheme","#themeName","#comparisonStateStack","#comparisonStateStackStart","#comparisonLineChanges","#scheduleBackgroundTokenize","#detachMessageListener","#shiftComparisonStateStack","#getPreviousEndState","#prebuildStateStack","#pendingPrebuildEndLine","#isStopped","#isPaused","#lastLine","#backgroundChangedLineRanges","#backgroundChangedRangeIndex","#postTokenizeMessage","#isMessageListenerAttached","#onMessage","#attachMessageListener","#cacheBracketIgnoredRanges"],"sources":["../../src/editor/tokenizer.ts"],"sourcesContent":["import { colorUtils } from '@pierre/theming/color';\nimport {\n EncodedTokenMetadata,\n type IGrammar,\n INITIAL,\n type StateStack,\n} from 'shiki/textmate';\n\nimport { DEFAULT_THEMES } from '../constants';\nimport type {\n BaseCodeOptions,\n DiffsHighlighter,\n HighlightedToken,\n RenderRange,\n} from '../types';\nimport type { TextDocument, TextDocumentChange } from './textDocument';\nimport { addEventListener, debounce, h } from './utils';\n\nconst TOKENIZE_TIME_LIMIT = 500;\nlet nextTokenizerId = 0;\n\nexport interface EditorTokenizerProps {\n highlighter: DiffsHighlighter;\n textDocument: TextDocument;\n codeOptions: BaseCodeOptions;\n matchBrackets?: boolean;\n setStyle: (style: string) => void;\n onDeferTokenize: (\n lines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ) => void;\n // Fired after the active theme (light/dark mode or theme name) changes and the\n // new theme CSS has been applied. Lets the editor recompute overlay pieces\n // that captured a resolved theme color, e.g. rounded selection corner masks.\n onThemeChange?: () => void;\n __debug?: boolean;\n}\n\n/** Stoppable code tokenizer for the editor */\nexport class EditorTokenizer {\n #highlighter: DiffsHighlighter;\n #grammar: IGrammar | undefined;\n #mediaQueryList: MediaQueryList;\n #themeType: 'light' | 'dark' = 'dark';\n // The resolved name of the theme currently applied to the editor (e.g.\n // `github-light`). Tracked so `syncTheme` can detect a host-driven theme swap\n // even when the light/dark mode itself is unchanged.\n #themeName = '';\n #colorMap: string[];\n #textDocument: TextDocument;\n #tokenizeMaxLineLength: number;\n #setStyle: EditorTokenizerProps['setStyle'];\n #onDeferTokenize: EditorTokenizerProps['onDeferTokenize'];\n #onThemeChange: EditorTokenizerProps['onThemeChange'];\n #matchBrackets: boolean;\n #debug: boolean;\n #disposes?: (() => void)[];\n #isCleanedUp = false;\n\n // state\n #stateStack: StateStack[] = [INITIAL]; // cached state stack by line index\n #comparisonStateStack: StateStack[] = [];\n #comparisonStateStackStart = 0;\n #comparisonLineChanges: NonNullable<\n TextDocumentChange['changedLineChanges']\n > = [];\n #lastLine: number = -1;\n #isStopped: boolean = true;\n #isPaused: boolean = false;\n #backgroundJobId: number = 0;\n #tokenizerId = ++nextTokenizerId;\n #backgroundPrebuildEndLine = -1;\n #pendingPrebuildEndLine = -1;\n #backgroundChangedLineRanges: readonly [number, number][] | undefined;\n #backgroundChangedRangeIndex: number = 0;\n #bracketIgnoredRanges: ([number, number][] | null | undefined)[] = [];\n #isMessageListenerAttached: boolean = false;\n\n #prebuildStateStack = debounce(async (renderRange?: RenderRange) => {\n // Drop work scheduled before cleanUp; a late timer must not call setTheme\n // on a highlighter that tests (or hosts) have already disposed.\n if (this.#isCleanedUp) {\n return;\n }\n const { startingLine = 0, totalLines = Infinity } = renderRange ?? {};\n const endLine = Math.min(\n totalLines === Infinity ? Infinity : startingLine + totalLines,\n this.#textDocument.lineCount\n );\n if (\n this.#grammar === undefined &&\n !isGrammarlessLanguage(this.#textDocument.languageId)\n ) {\n await this.#highlighter.loadLanguage(this.#textDocument.languageId);\n if (this.#isCleanedUp) {\n return;\n }\n this.#grammar = this.#highlighter.getLanguage(\n this.#textDocument.languageId\n );\n }\n this.#ensureActiveTheme();\n this.#scheduleStatePrebuild(endLine);\n }, 500);\n\n #onMessage = ({ data }: MessageEvent<unknown>) => {\n if (typeof data !== 'object' || data === null) {\n return;\n }\n const { type, tokenizerId, jobId } = data as {\n type?: unknown;\n tokenizerId?: unknown;\n jobId?: unknown;\n };\n if (\n type === 'tokenize' &&\n tokenizerId === this.#tokenizerId &&\n typeof jobId === 'number' &&\n jobId === this.#backgroundJobId\n ) {\n if (this.#backgroundPrebuildEndLine >= 0) {\n this.#backgroundPrebuild(jobId);\n } else {\n this.#backgroundTokenize(jobId);\n }\n }\n };\n\n get themeType(): 'light' | 'dark' {\n return this.#themeType;\n }\n\n getStringCommentRegexpRangesInLine(\n lineIndex: number\n ): [number, number][] | null {\n if (\n !this.#matchBrackets ||\n lineIndex < 0 ||\n lineIndex >= this.#textDocument.lineCount\n ) {\n return null;\n }\n this.#ensureGrammar();\n if (this.#grammar === undefined) {\n return null;\n }\n if (this.#bracketIgnoredRanges[lineIndex] === undefined) {\n this.#buildStateStack(lineIndex);\n const state = this.#stateStack[lineIndex] ?? INITIAL;\n const result = this.#tokenizeLineAt(lineIndex, state);\n this.#stateStack[lineIndex + 1] = result.state;\n }\n return this.#bracketIgnoredRanges[lineIndex] ?? null;\n }\n\n constructor({\n codeOptions,\n highlighter,\n textDocument,\n matchBrackets,\n setStyle,\n onDeferTokenize,\n onThemeChange,\n __debug,\n }: EditorTokenizerProps) {\n const {\n themeType: themeTypeOption = 'system',\n theme = DEFAULT_THEMES,\n tokenizeMaxLineLength = 1000,\n } = codeOptions;\n this.#mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');\n let themeType: 'light' | 'dark' | undefined;\n if (themeTypeOption === 'system') {\n // Prefer the host document's computed color-scheme (page CSS/classes can\n // force light/dark while the OS media query differs) over matchMedia.\n themeType = this.#resolveSystemThemeType();\n } else {\n themeType = themeTypeOption;\n }\n // Only track the document/system color scheme when the surface follows it\n // (`themeType: 'system'`). A surface pinned to an explicit 'dark'/'light'\n // theme keeps that theme regardless of the page, so re-tokenizing after an\n // edit must emit the same `--diffs-token-{theme}` variable the SSR markup\n // used; otherwise the edited tokens fall back to the default foreground.\n if (typeof theme !== 'string' && themeTypeOption === 'system') {\n const observer = new MutationObserver((mutations) => {\n for (const { type, attributeName } of mutations) {\n if (\n type === 'attributes' &&\n attributeName !== null &&\n (attributeName === 'class' || attributeName.startsWith('data-'))\n ) {\n const themeType = this.#resolveSystemThemeType();\n this.#emitThemeChange(theme[themeType], themeType);\n break;\n }\n }\n });\n observer.observe(document.documentElement, { attributes: true });\n observer.observe(document.body, { attributes: true });\n this.#disposes = [\n addEventListener(this.#mediaQueryList, 'change', () => {\n // Re-read computed color-scheme so a host-forced scheme still wins\n // when the OS preference changes underneath it.\n const themeType = this.#resolveSystemThemeType();\n this.#emitThemeChange(theme[themeType], themeType);\n }),\n () => observer.disconnect(),\n ];\n }\n this.#highlighter = highlighter;\n this.#textDocument = textDocument;\n this.#tokenizeMaxLineLength = tokenizeMaxLineLength;\n this.#setStyle = setStyle;\n this.#onDeferTokenize = onDeferTokenize;\n this.#onThemeChange = onThemeChange;\n this.#matchBrackets = matchBrackets !== false;\n this.#debug = __debug ?? false;\n this.#ensureGrammar();\n this.#colorMap = [];\n this.#setTheme(\n typeof theme === 'string' ? theme : theme[themeType],\n typeof theme === 'string' ? undefined : themeType\n );\n }\n\n // By default, diffs components support dual themes, but the tokenizer only renders\n // the preferred theme. When the theme type is changed, the tokenizer will re-tokenize the document.\n #emitThemeChange(themeName: string, themeType: 'light' | 'dark') {\n if (themeName === this.#themeName && themeType === this.#themeType) {\n return;\n }\n this.#setTheme(themeName, themeType);\n this.stopBackgroundTokenize();\n this.#stateStack = [INITIAL];\n this.#comparisonStateStack = [];\n this.#comparisonStateStackStart = 0;\n this.#comparisonLineChanges = [];\n if (this.#grammar !== undefined && this.#textDocument.lineCount > 0) {\n this.#scheduleBackgroundTokenize(0);\n }\n // The theme CSS is now applied, so overlay pieces that captured a resolved\n // theme color (e.g. rounded selection corner masks) can recompute against\n // the new colors instead of keeping the old light/dark value.\n this.#onThemeChange?.();\n }\n\n // Respect an explicit host color-scheme override. When the computed value\n // advertises support for both schemes, let the OS preference choose one.\n #resolveSystemThemeType(): 'light' | 'dark' {\n try {\n if (\n typeof document !== 'undefined' &&\n typeof getComputedStyle === 'function' &&\n document.body != null\n ) {\n const colorSchemes = getComputedStyle(document.body).colorScheme.split(\n /\\s+/\n );\n const supportsDark = colorSchemes.includes('dark');\n const supportsLight = colorSchemes.includes('light');\n // A single host-forced scheme wins. `light dark` only declares support\n // for both schemes, so the media query still selects the active one.\n if (supportsDark !== supportsLight) {\n return supportsDark ? 'dark' : 'light';\n }\n }\n } catch {\n // jsdom and similar harnesses may lack getComputedStyle or throw; fall\n // through to the OS media query.\n }\n return this.#mediaQueryList.matches ? 'dark' : 'light';\n }\n\n // Re-apply the editor's theme from the surface's current code options. Edit\n // mode reuses a single tokenizer across re-renders, so when the host swaps the\n // theme — a theme picker, a light/dark toggle, etc. — we must recompute the\n // active theme and re-tokenize. Without this the editor keeps rendering the\n // theme it captured when it first attached (stale line-highlight background\n // and token colors). System-driven changes are still handled by the\n // observers wired up in the constructor; this covers explicit `themeType`/\n // `theme` option changes that those observers don't see.\n syncTheme(codeOptions: BaseCodeOptions): void {\n const { themeType = 'system', theme = DEFAULT_THEMES } = codeOptions;\n // A single pinned theme does not follow the themeType option or system\n // scheme flips; its own classification stays authoritative.\n if (typeof theme === 'string') {\n const pinnedThemeType = this.#highlighter.getTheme(theme).type;\n if (theme === this.#themeName && pinnedThemeType === this.#themeType) {\n return;\n }\n this.#emitThemeChange(theme, pinnedThemeType);\n return;\n }\n const nextThemeType =\n themeType === 'system' ? this.#resolveSystemThemeType() : themeType;\n const nextThemeName = theme[nextThemeType];\n if (\n nextThemeType === this.#themeType &&\n nextThemeName === this.#themeName\n ) {\n return;\n }\n this.#emitThemeChange(nextThemeName, nextThemeType);\n }\n\n #setTheme(themeName: string, themeType?: 'light' | 'dark') {\n const { theme, colorMap } = this.#highlighter.setTheme(themeName);\n const { colors = {} } = this.#highlighter.getTheme(themeName);\n const selectionBackground = colors['editor.selectionBackground'];\n const themeLineHighlightBackground =\n colors['editor.lineHighlightBackground'];\n const lineHighlightBackground =\n themeLineHighlightBackground != null &&\n themeLineHighlightBackground.trim() !== '' &&\n !colorUtils.isFullyTransparent(themeLineHighlightBackground)\n ? themeLineHighlightBackground\n : undefined;\n // A usable theme background opts into the semantic active-line mix.\n // Missing backgrounds retain the resolved row color and rely on a border.\n const lineHighlightBorder =\n colors['editor.lineHighlightBorder'] ??\n (lineHighlightBackground == null\n ? 'color-mix(in lab, var(--diffs-bg) 70%, var(--diffs-fg))'\n : 'transparent');\n const activeLineSourceMix =\n lineHighlightBackground == null ? '100%' : '85%';\n const cursorForeground = colors['editorCursor.foreground'];\n const findMatchBackground = colors['editor.findMatchBackground'];\n const findMatchHighlightBackground =\n colors['editor.findMatchHighlightBackground'];\n const bracketMatchBackground = colors['editorBracketMatch.background'];\n const bracketMatchBorder = colors['editorBracketMatch.border'];\n const hintForeground = colors['editorHint.foreground'];\n const infoForeground = colors['editorInfo.foreground'];\n const warningForeground = colors['editorWarning.foreground'];\n const errorForeground = colors['editorError.foreground'];\n this.#setStyle(`:host {\n --diffs-editor-selection-bg: ${selectionBackground ?? 'var(--diffs-line-bg)'};\n --diffs-editor-line-highlight-border: ${lineHighlightBorder};\n --diffs-editor-active-line-source-mix: ${activeLineSourceMix};\n --diffs-editor-match-bg: ${findMatchBackground ?? 'initial'};\n --diffs-editor-match-highlight-bg: ${findMatchHighlightBackground ?? 'initial'};\n --diffs-editor-bracket-match-bg: ${bracketMatchBackground ?? 'initial'};\n --diffs-editor-bracket-match-border: ${bracketMatchBorder ?? 'initial'};\n --diffs-editor-cursor-fg: ${cursorForeground ?? 'initial'};\n --diffs-editor-hint-fg: ${hintForeground ?? 'initial'};\n --diffs-editor-info-fg: ${infoForeground ?? 'initial'};\n --diffs-editor-warning-fg: ${warningForeground ?? 'initial'};\n --diffs-editor-error-fg: ${errorForeground ?? 'initial'};\n }`);\n this.#themeName = themeName;\n this.#themeType = themeType ?? theme.type;\n this.#colorMap = colorMap;\n }\n\n // The shared highlighter is also used for dual-theme SSR (`themes: {dark,light}`),\n // which leaves its active theme on whichever pass finished last (usually light).\n // The tokenizer caches a single-theme colorMap from construction; if we tokenize\n // without re-activating that theme, grammar color indices are looked up in the\n // wrong map — property names resolve to a near-foreground gray while types and\n // comments (stable across maps) still look correct. Re-apply before every\n // tokenize path so a first edit after load matches a later file-switch re-attach.\n #ensureActiveTheme(): void {\n if (this.#themeName === '') {\n return;\n }\n const { colorMap } = this.#highlighter.setTheme(this.#themeName);\n this.#colorMap = colorMap;\n }\n\n cleanUp(): void {\n this.#isCleanedUp = true;\n this.stopBackgroundTokenize();\n this.#detachMessageListener();\n this.#disposes?.forEach((dispose) => dispose());\n this.#disposes = undefined;\n }\n\n // to use `tokenize`, call `prebuildStateStackMap` first to prebuild\n // the state stack map for the given render range.\n tokenize(\n change: TextDocumentChange,\n renderRange?: RenderRange,\n hostRealignsRows = false\n ): Map<number, Array<HighlightedToken>> {\n this.#ensureGrammar();\n this.#ensureActiveTheme();\n if (\n this.#grammar === undefined &&\n !isGrammarlessLanguage(this.#textDocument.languageId)\n ) {\n throw new Error(\n `Grammar for language \"${this.#textDocument.languageId}\" not loaded`\n );\n }\n\n const { lineCount } = this.#textDocument;\n const { startingLine = 0, totalLines = Infinity } = renderRange ?? {};\n const renderRangeEndLine =\n totalLines === Infinity\n ? lineCount\n : Math.min(startingLine + totalLines, lineCount);\n\n const dirtyStart = change.startLine;\n const viewStart = Math.max(startingLine, dirtyStart);\n const crossesRenderRangeEnd =\n renderRange !== undefined &&\n totalLines !== Infinity &&\n change.lineDelta > 0 &&\n dirtyStart < renderRangeEndLine &&\n change.endLine >= renderRangeEndLine;\n const canReuseCachedStates =\n change.lineDelta === 0 &&\n (change.changedLineChanges?.every(([, , lineDelta]) => lineDelta === 0) ??\n true);\n if (this.#matchBrackets && !canReuseCachedStates) {\n // Structural edits shift cache indexes, so only the untouched prefix is\n // safe. Same-line edits overwrite every range they re-tokenize and can\n // retain the untouched suffix once grammar state reconverges.\n this.#bracketIgnoredRanges.length = Math.min(\n this.#bracketIgnoredRanges.length,\n change.startLine\n );\n }\n const canReuseShiftedStates =\n hostRealignsRows && change.lineDelta !== 0 && dirtyStart >= startingLine;\n const canCacheTokenizedStates =\n canReuseCachedStates ||\n renderRange === undefined ||\n dirtyStart >= viewStart;\n const changedLineRanges: readonly [number, number][] =\n change.changedLineRanges ?? [[dirtyStart, change.endLine]];\n this.#comparisonStateStack = [];\n this.#comparisonStateStackStart = 0;\n this.#comparisonLineChanges = [];\n let offscreenSyncEnd = -1;\n if (dirtyStart < viewStart) {\n for (const [rangeStart, rangeEnd] of changedLineRanges) {\n if (rangeStart < viewStart) {\n offscreenSyncEnd = Math.max(\n offscreenSyncEnd,\n Math.min(rangeEnd, viewStart - 1)\n );\n }\n }\n }\n const shouldFlushOffscreenLines =\n offscreenSyncEnd >= dirtyStart &&\n (canReuseCachedStates || change.lineDelta < 0);\n if (canReuseCachedStates) {\n this.#buildStateStack(dirtyStart);\n } else {\n this.#shiftComparisonStateStack(change);\n if (renderRange === undefined || dirtyStart >= viewStart) {\n this.#buildStateStack(viewStart);\n }\n }\n\n let changedRangeIndex = 0;\n let currentChangedRangeEnd = changedLineRanges[changedRangeIndex][1];\n let backgroundStartLine: number | undefined;\n let backgroundChangedRangeIndex = 0;\n let line = canReuseCachedStates\n ? changedLineRanges[changedRangeIndex][0]\n : viewStart;\n let settled = false;\n const dirtyLines: Map<number, Array<HighlightedToken>> = new Map();\n const offscreenDirtyLines:\n | Map<number, Array<HighlightedToken>>\n | undefined = shouldFlushOffscreenLines ? new Map() : undefined;\n if (offscreenDirtyLines !== undefined && !canReuseCachedStates) {\n const offscreenEnd = Math.min(\n offscreenSyncEnd + 1,\n viewStart,\n renderRangeEndLine\n );\n if (offscreenEnd > dirtyStart) {\n this.#buildStateStack(offscreenEnd);\n let offscreenLine = dirtyStart;\n let offscreenState = this.#stateStack[offscreenLine] ?? INITIAL;\n for (; offscreenLine < offscreenEnd; offscreenLine++) {\n const resolved = this.#tokenizeLineAt(offscreenLine, offscreenState);\n offscreenState = resolved.state;\n offscreenDirtyLines.set(offscreenLine, resolved.resolvedTokens);\n }\n this.#stateStack[offscreenEnd] = offscreenState;\n }\n }\n // Seed the loop's grammar state after the offscreen flush, not before it.\n // When a delete's removed lines reach the viewport's first line, the flush\n // rebuilds the cached state up to `line`; reading it earlier would capture\n // the truncated INITIAL state and color the viewport as if outside an open\n // construct (block comment, template literal) it is actually inside.\n let state = this.#stateStack[line] ?? INITIAL;\n for (; line < renderRangeEndLine; ) {\n const previousNextState = canReuseCachedStates\n ? this.#stateStack[line + 1]\n : canReuseShiftedStates\n ? this.#getPreviousEndState(line + 1)\n : undefined;\n if (canCacheTokenizedStates) {\n this.#stateStack[line] = state;\n }\n\n const { resolvedTokens, state: nextState } = this.#tokenizeLineAt(\n line,\n state\n );\n state = nextState;\n\n if (line >= viewStart) {\n dirtyLines.set(line, resolvedTokens);\n } else {\n offscreenDirtyLines?.set(line, resolvedTokens);\n }\n\n if (canCacheTokenizedStates) {\n this.#stateStack[line + 1] = state;\n }\n settled =\n line >= currentChangedRangeEnd &&\n (canReuseCachedStates || canReuseShiftedStates) &&\n previousNextState !== undefined &&\n state.equals(previousNextState);\n if (settled) {\n changedRangeIndex++;\n const nextRange = changedLineRanges[changedRangeIndex];\n if (nextRange === undefined) {\n break;\n }\n if (nextRange[0] >= renderRangeEndLine) {\n backgroundStartLine = nextRange[0];\n backgroundChangedRangeIndex = changedRangeIndex;\n break;\n }\n let nextState: StateStack | undefined = this.#stateStack[nextRange[0]];\n if (canReuseShiftedStates) {\n for (\n let stateLine = line + 2;\n stateLine <= nextRange[0];\n stateLine++\n ) {\n nextState = this.#getPreviousEndState(stateLine);\n if (nextState === undefined) {\n break;\n }\n this.#stateStack[stateLine] = nextState;\n }\n }\n if (nextState === undefined) {\n currentChangedRangeEnd = nextRange[1];\n line++;\n } else {\n line = nextRange[0];\n state = nextState;\n currentChangedRangeEnd = nextRange[1];\n }\n settled = false;\n continue;\n }\n line++;\n }\n\n if (canCacheTokenizedStates) {\n if (line < renderRangeEndLine) {\n this.#stateStack[line + 1] = state;\n } else {\n this.#stateStack[line] = state;\n }\n }\n\n if (settled && canReuseShiftedStates && backgroundStartLine === undefined) {\n for (let stateLine = line + 2; stateLine <= lineCount; stateLine++) {\n const previousState = this.#getPreviousEndState(stateLine);\n if (previousState === undefined) {\n break;\n }\n this.#stateStack[stateLine] = previousState;\n }\n this.#comparisonStateStack = [];\n this.#comparisonStateStackStart = 0;\n this.#comparisonLineChanges = [];\n }\n\n if (offscreenDirtyLines !== undefined && offscreenDirtyLines.size > 0) {\n this.#onDeferTokenize(offscreenDirtyLines, this.#themeType);\n }\n\n if (backgroundStartLine !== undefined) {\n if (this.#matchBrackets && canReuseCachedStates) {\n this.#bracketIgnoredRanges.length = Math.min(\n this.#bracketIgnoredRanges.length,\n backgroundStartLine\n );\n }\n this.#scheduleBackgroundTokenize(\n backgroundStartLine,\n changedLineRanges,\n backgroundChangedRangeIndex\n );\n } else if (!settled && line < lineCount) {\n const backgroundLine =\n crossesRenderRangeEnd && dirtyStart >= viewStart\n ? renderRangeEndLine\n : dirtyStart < viewStart && !canReuseCachedStates\n ? dirtyStart\n : line;\n if (this.#matchBrackets && canReuseCachedStates) {\n this.#bracketIgnoredRanges.length = Math.min(\n this.#bracketIgnoredRanges.length,\n backgroundLine\n );\n }\n this.#scheduleBackgroundTokenize(\n backgroundLine,\n changedLineRanges,\n changedRangeIndex\n );\n }\n\n return dirtyLines;\n }\n\n prebuildStateStack(renderRange?: RenderRange): void {\n this.#ensureGrammar();\n this.#prebuildStateStack(renderRange);\n }\n\n stopBackgroundTokenize(): void {\n this.#pendingPrebuildEndLine = -1;\n if (this.#isStopped) {\n return;\n }\n this.#isStopped = true;\n this.#isPaused = false;\n this.#lastLine = -1;\n this.#backgroundPrebuildEndLine = -1;\n this.#backgroundChangedLineRanges = undefined;\n this.#backgroundChangedRangeIndex = 0;\n this.#comparisonStateStack = [];\n this.#comparisonStateStackStart = 0;\n this.#comparisonLineChanges = [];\n this.#detachMessageListener();\n }\n\n pauseBackgroundTokenize(): void {\n if (this.#isStopped || this.#isPaused) {\n return;\n }\n if (this.#debug) {\n console.log('[diffs/editor] background tokenization paused', {\n jobId: this.#backgroundJobId,\n });\n }\n this.#isPaused = true;\n }\n\n resumeBackgroundTokenize(): void {\n if (\n this.#isStopped ||\n !this.#isPaused ||\n this.#grammar === undefined ||\n this.#lastLine < 0\n ) {\n return;\n }\n if (this.#debug) {\n console.log('[diffs/editor] background tokenization resumed', {\n jobId: this.#backgroundJobId,\n });\n }\n this.#isPaused = false;\n this.#postTokenizeMessage(this.#backgroundJobId);\n }\n\n #ensureGrammar(): void {\n if (\n this.#grammar === undefined &&\n !isGrammarlessLanguage(this.#textDocument.languageId) &&\n this.#highlighter\n .getLoadedLanguages()\n .includes(this.#textDocument.languageId)\n ) {\n this.#grammar = this.#highlighter.getLanguage(\n this.#textDocument.languageId\n );\n }\n }\n\n #attachMessageListener(): void {\n if (this.#isMessageListenerAttached) {\n return;\n }\n globalThis.addEventListener('message', this.#onMessage);\n this.#isMessageListenerAttached = true;\n }\n\n #detachMessageListener(): void {\n if (!this.#isMessageListenerAttached) {\n return;\n }\n globalThis.removeEventListener('message', this.#onMessage);\n this.#isMessageListenerAttached = false;\n }\n\n #postTokenizeMessage(jobId: number): void {\n // use `postMessage` instead of `setTimeout(fn, 0)` to avoid 4ms delay\n globalThis.postMessage({\n type: 'tokenize',\n tokenizerId: this.#tokenizerId,\n jobId,\n });\n }\n\n #scheduleBackgroundTokenize(\n startLine: number,\n changedLineRanges?: readonly [number, number][],\n changedRangeIndex = 0\n ): void {\n if (isGrammarlessLanguage(this.#textDocument.languageId)) {\n return;\n }\n\n const jobId = ++this.#backgroundJobId;\n\n if (this.#debug) {\n console.log('[diffs/editor] background tokenization scheduled', {\n jobId,\n startLine,\n changedLineRanges,\n changedRangeIndex,\n });\n }\n\n this.#isStopped = false;\n this.#isPaused = false;\n this.#lastLine = startLine;\n if (this.#backgroundPrebuildEndLine >= 0) {\n this.#pendingPrebuildEndLine = Math.max(\n this.#pendingPrebuildEndLine,\n this.#backgroundPrebuildEndLine\n );\n }\n this.#backgroundPrebuildEndLine = -1;\n this.#backgroundChangedLineRanges = changedLineRanges;\n this.#backgroundChangedRangeIndex = changedRangeIndex;\n this.#attachMessageListener();\n this.#postTokenizeMessage(jobId);\n }\n\n #scheduleStatePrebuild(endLine: number): void {\n if (this.#grammar === undefined || this.#stateStack.length > endLine) {\n return;\n }\n // Extend an active prebuild, or retain the target until the foreground\n // edit job reconverges and releases the state cache.\n if (!this.#isStopped) {\n if (this.#backgroundPrebuildEndLine >= 0) {\n this.#backgroundPrebuildEndLine = Math.max(\n this.#backgroundPrebuildEndLine,\n endLine\n );\n } else {\n this.#pendingPrebuildEndLine = Math.max(\n this.#pendingPrebuildEndLine,\n endLine\n );\n }\n return;\n }\n\n const jobId = ++this.#backgroundJobId;\n this.#isStopped = false;\n this.#isPaused = false;\n this.#lastLine = this.#stateStack.length - 1;\n this.#backgroundPrebuildEndLine = endLine;\n this.#pendingPrebuildEndLine = -1;\n this.#backgroundChangedLineRanges = undefined;\n this.#backgroundChangedRangeIndex = 0;\n this.#attachMessageListener();\n this.#postTokenizeMessage(jobId);\n }\n\n #tokenizeLineAt(\n line: number,\n state: StateStack\n ): { resolvedTokens: Array<HighlightedToken>; state: StateStack } {\n const lineText = this.#textDocument.getLineText(line);\n if (lineText.length > this.#tokenizeMaxLineLength) {\n console.warn(\n `[diffs] Line(${line}) too long to tokenize: ${lineText.length}`\n );\n this.#cacheBracketIgnoredRanges(line, null);\n return { resolvedTokens: [[0, '', lineText]], state };\n }\n if (\n this.#grammar === undefined ||\n lineText === '' ||\n lineText.trim() === ''\n ) {\n this.#cacheBracketIgnoredRanges(line, null);\n return { resolvedTokens: [[0, '', lineText]], state };\n }\n const result = tokenizeLine(\n this.#grammar,\n this.#colorMap,\n lineText,\n state,\n TOKENIZE_TIME_LIMIT,\n this.#matchBrackets\n );\n this.#cacheBracketIgnoredRanges(line, result.bracketIgnoredRanges);\n return {\n resolvedTokens: result.resolvedTokens,\n state: result.ruleStack,\n };\n }\n\n #cacheBracketIgnoredRanges(\n line: number,\n ranges: [number, number][] | null\n ): void {\n if (this.#matchBrackets) {\n this.#bracketIgnoredRanges[line] = ranges;\n }\n }\n\n // Preserve old end states as comparison-only sentinels, copying whichever\n // side of the edit is smaller. Index shifts are resolved lazily on lookup.\n #shiftComparisonStateStack(change: TextDocumentChange): void {\n const lineChanges =\n change.changedLineChanges ??\n ([[change.startLine, change.endLine, change.lineDelta]] as const);\n const comparisonStart = change.startLine + 1;\n const comparisonLength = this.#stateStack.length - comparisonStart;\n if (comparisonStart <= comparisonLength) {\n this.#comparisonStateStack = this.#stateStack;\n this.#comparisonStateStackStart = 0;\n this.#stateStack = this.#stateStack.slice(0, comparisonStart);\n } else {\n this.#comparisonStateStackStart = comparisonStart;\n this.#comparisonStateStack = this.#stateStack.slice(comparisonStart);\n this.#stateStack.length = Math.min(\n this.#stateStack.length,\n comparisonStart\n );\n }\n this.#comparisonLineChanges = lineChanges;\n }\n\n #getPreviousEndState(line: number): StateStack | undefined {\n let previousLine = line;\n for (\n let index = this.#comparisonLineChanges.length - 1;\n index >= 0;\n index--\n ) {\n const [startLine, endLine, lineDelta] =\n this.#comparisonLineChanges[index];\n if (lineDelta === 0) {\n continue;\n }\n if (previousLine > endLine) {\n previousLine -= lineDelta;\n } else if (previousLine > startLine) {\n return this.#stateStack[line];\n }\n }\n return (\n this.#comparisonStateStack[\n previousLine - this.#comparisonStateStackStart\n ] ?? this.#stateStack[line]\n );\n }\n\n #buildStateStack(endAt: number, timeBudget?: number): boolean {\n const boundedEndAt = Math.min(\n Math.max(0, endAt),\n this.#textDocument.lineCount\n );\n if (this.#stateStack.length > boundedEndAt || this.#grammar === undefined) {\n return true;\n }\n const startedAt = timeBudget === undefined ? 0 : performance.now();\n let line = this.#stateStack.length - 1;\n let state = this.#stateStack[line] ?? INITIAL;\n while (line < boundedEndAt) {\n this.#stateStack[line] = state;\n const lineText = this.#textDocument.getLineText(line);\n if (\n lineText.length <= this.#tokenizeMaxLineLength &&\n lineText !== '' &&\n lineText.trim() !== ''\n ) {\n const result = tokenizeLine(\n this.#grammar,\n this.#colorMap,\n lineText,\n state,\n TOKENIZE_TIME_LIMIT,\n this.#matchBrackets,\n false\n );\n this.#cacheBracketIgnoredRanges(line, result.bracketIgnoredRanges);\n state = result.ruleStack;\n } else {\n this.#cacheBracketIgnoredRanges(line, null);\n }\n line++;\n this.#stateStack[line] = state;\n if (\n timeBudget !== undefined &&\n performance.now() - startedAt > timeBudget\n ) {\n break;\n }\n }\n return line >= boundedEndAt;\n }\n\n #backgroundPrebuild(jobId: number): void {\n if (\n this.#isStopped ||\n this.#isPaused ||\n this.#grammar === undefined ||\n jobId !== this.#backgroundJobId\n ) {\n return;\n }\n\n this.#ensureActiveTheme();\n // State prebuilds intentionally omit rendered tokens and yield between\n // short chunks so a deep viewport does not monopolize the main thread.\n const complete = this.#buildStateStack(this.#backgroundPrebuildEndLine, 1);\n if (this.#isStopped || this.#isPaused || jobId !== this.#backgroundJobId) {\n return;\n }\n if (complete) {\n this.stopBackgroundTokenize();\n return;\n }\n this.#lastLine = this.#stateStack.length - 1;\n this.#postTokenizeMessage(jobId);\n }\n\n #backgroundTokenize(jobId: number) {\n if (\n this.#isStopped ||\n this.#isPaused ||\n this.#grammar === undefined ||\n jobId !== this.#backgroundJobId\n ) {\n return;\n }\n\n this.#ensureActiveTheme();\n\n const t = performance.now();\n const lines = new Map<number, Array<HighlightedToken>>();\n const totalLines = this.#textDocument.lineCount;\n const changedLineRanges = this.#backgroundChangedLineRanges;\n\n let line = this.#lastLine;\n let state = this.#stateStack[line] ?? INITIAL;\n let settled = false;\n let changedRangeIndex = this.#backgroundChangedRangeIndex;\n let currentChangedRangeEnd = changedLineRanges?.[changedRangeIndex]?.[1];\n for (; line < totalLines; ) {\n this.#stateStack[line] = state;\n\n const previousNextState =\n currentChangedRangeEnd !== undefined\n ? this.#getPreviousEndState(line + 1)\n : undefined;\n const lineText = this.#textDocument.getLineText(line);\n if (lineText.length > this.#tokenizeMaxLineLength) {\n console.warn(\n `[diffs] Line(${line}) too long to tokenize: ${lineText.length}`\n );\n lines.set(line, [[0, '', lineText]]);\n this.#cacheBracketIgnoredRanges(line, null);\n } else if (lineText === '' || lineText.trim() === '') {\n lines.set(line, [[0, '', lineText]]);\n this.#cacheBracketIgnoredRanges(line, null);\n } else {\n const ret = tokenizeLine(\n this.#grammar,\n this.#colorMap,\n lineText,\n state,\n TOKENIZE_TIME_LIMIT,\n this.#matchBrackets\n );\n lines.set(line, ret.resolvedTokens);\n this.#cacheBracketIgnoredRanges(line, ret.bracketIgnoredRanges);\n state = ret.ruleStack;\n }\n\n this.#stateStack[line + 1] = state;\n settled =\n currentChangedRangeEnd !== undefined &&\n line >= currentChangedRangeEnd &&\n previousNextState !== undefined &&\n state.equals(previousNextState);\n line++;\n if (settled) {\n changedRangeIndex++;\n const nextRange = changedLineRanges?.[changedRangeIndex];\n if (nextRange === undefined) {\n break;\n }\n currentChangedRangeEnd = nextRange[1];\n if (this.#stateStack[nextRange[0]] === undefined) {\n settled = false;\n } else {\n line = nextRange[0];\n state = this.#stateStack[line] ?? state;\n settled = false;\n continue;\n }\n }\n\n // limit the time of partial tokenize to 1ms\n if (performance.now() - t > 1) {\n break;\n }\n }\n\n this.#onDeferTokenize(lines, this.#themeType);\n if (this.#isStopped || this.#isPaused || jobId !== this.#backgroundJobId) {\n return;\n }\n\n if (settled || line >= totalLines) {\n const pendingPrebuildEndLine = this.#pendingPrebuildEndLine;\n this.stopBackgroundTokenize();\n if (pendingPrebuildEndLine >= 0) {\n this.#scheduleStatePrebuild(pendingPrebuildEndLine);\n }\n return;\n }\n\n this.#lastLine = line;\n this.#backgroundChangedRangeIndex = changedRangeIndex;\n this.#postTokenizeMessage(jobId);\n }\n}\n\nfunction tokenizeLine(\n grammar: IGrammar,\n colorMap: string[],\n lineText: string,\n stateStack: StateStack,\n timeLimit?: number,\n collectBracketIgnoredRanges = true,\n resolveTokens = true\n): {\n ruleStack: StateStack;\n resolvedTokens: Array<HighlightedToken>;\n bracketIgnoredRanges: [number, number][];\n} {\n const result = grammar.tokenizeLine2(lineText, stateStack, timeLimit);\n if (result.stoppedEarly) {\n console.warn(\n `[diffs] Time limit reached when tokenizing line: ${lineText.substring(0, 100)}`\n );\n }\n const rawTokens = result.tokens;\n const tokensLength = rawTokens.length / 2;\n const resolvedTokens: Array<HighlightedToken> = [];\n const bracketIgnoredRanges: [number, number][] = [];\n if (!resolveTokens && !collectBracketIgnoredRanges) {\n return {\n ruleStack: result.ruleStack,\n resolvedTokens,\n bracketIgnoredRanges,\n };\n }\n for (let j = 0; j < tokensLength; j++) {\n const offset = rawTokens[2 * j];\n const nextOffset =\n j + 1 < tokensLength ? rawTokens[2 * j + 2] : lineText.length;\n if (offset === nextOffset) {\n // should never reach here, skip if happens anyway\n continue;\n }\n const metadata = rawTokens[2 * j + 1];\n if (resolveTokens) {\n const fg = EncodedTokenMetadata.getForeground(metadata);\n resolvedTokens.push([\n offset,\n colorMap[fg],\n lineText.slice(offset, nextOffset),\n ]);\n }\n if (\n collectBracketIgnoredRanges &&\n EncodedTokenMetadata.getTokenType(metadata) > 0\n ) {\n bracketIgnoredRanges.push([offset, nextOffset]);\n }\n }\n return {\n ruleStack: result.ruleStack,\n resolvedTokens,\n bracketIgnoredRanges,\n };\n}\n\nexport function renderLineTokens(\n tokens: Array<HighlightedToken>\n): (HTMLElement | string)[] {\n return tokens.map(([char, fg, textContent]) => {\n if (char === 0 && fg === '') {\n if (textContent === '') {\n return h('br');\n }\n return textContent;\n }\n return h('span', {\n dataset: {\n char: char.toString(),\n },\n style: `color:${fg};`,\n textContent: textContent,\n });\n });\n}\n\n// Shiki special-cases `text` and `ansi` in codeToHast but does not expose grammars.\nfunction isGrammarlessLanguage(languageId: string): boolean {\n return languageId === 'text' || languageId === 'ansi';\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tokenizer.js","names":[],"sources":["../../src/editor/tokenizer.ts"],"sourcesContent":["import { colorUtils } from '@pierre/theming/color';\nimport {\n EncodedTokenMetadata,\n type IGrammar,\n INITIAL,\n type StateStack,\n} from 'shiki/textmate';\n\nimport { DEFAULT_THEMES } from '../constants';\nimport type {\n BaseCodeOptions,\n DiffsHighlighter,\n HighlightedToken,\n RenderRange,\n} from '../types';\nimport type { TextDocument, TextDocumentChange } from './textDocument';\nimport { addEventListener, debounce, h } from './utils';\n\nconst TOKENIZE_TIME_LIMIT = 500;\nlet nextTokenizerId = 0;\n\nexport interface EditorTokenizerProps {\n highlighter: DiffsHighlighter;\n textDocument: TextDocument;\n codeOptions: BaseCodeOptions;\n matchBrackets?: boolean;\n setStyle: (style: string) => void;\n onDeferTokenize: (\n lines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ) => void;\n // Fired after the active theme (light/dark mode or theme name) changes and the\n // new theme CSS has been applied. Lets the editor recompute overlay pieces\n // that captured a resolved theme color, e.g. rounded selection corner masks.\n onThemeChange?: () => void;\n __debug?: boolean;\n}\n\n/** Stoppable code tokenizer for the editor */\nexport class EditorTokenizer {\n #highlighter: DiffsHighlighter;\n #grammar: IGrammar | undefined;\n #mediaQueryList: MediaQueryList;\n #themeType: 'light' | 'dark' = 'dark';\n // The resolved name of the theme currently applied to the editor (e.g.\n // `github-light`). Tracked so `syncTheme` can detect a host-driven theme swap\n // even when the light/dark mode itself is unchanged.\n #themeName = '';\n #colorMap: string[];\n #textDocument: TextDocument;\n #tokenizeMaxLineLength: number;\n #setStyle: EditorTokenizerProps['setStyle'];\n #onDeferTokenize: EditorTokenizerProps['onDeferTokenize'];\n #onThemeChange: EditorTokenizerProps['onThemeChange'];\n #matchBrackets: boolean;\n #debug: boolean;\n #disposes?: (() => void)[];\n #isCleanedUp = false;\n\n // state\n #stateStack: StateStack[] = [INITIAL]; // cached state stack by line index\n #comparisonStateStack: StateStack[] = [];\n #comparisonStateStackStart = 0;\n #comparisonLineChanges: NonNullable<\n TextDocumentChange['changedLineChanges']\n > = [];\n #lastLine: number = -1;\n #isStopped: boolean = true;\n #isPaused: boolean = false;\n #backgroundJobId: number = 0;\n #tokenizerId = ++nextTokenizerId;\n #backgroundPrebuildEndLine = -1;\n #pendingPrebuildEndLine = -1;\n #backgroundChangedLineRanges: readonly [number, number][] | undefined;\n #backgroundChangedRangeIndex: number = 0;\n #bracketIgnoredRanges: ([number, number][] | null | undefined)[] = [];\n #isMessageListenerAttached: boolean = false;\n\n #prebuildStateStack = debounce(async (renderRange?: RenderRange) => {\n // Drop work scheduled before cleanUp; a late timer must not call setTheme\n // on a highlighter that tests (or hosts) have already disposed.\n if (this.#isCleanedUp) {\n return;\n }\n const { startingLine = 0, totalLines = Infinity } = renderRange ?? {};\n const endLine = Math.min(\n totalLines === Infinity ? Infinity : startingLine + totalLines,\n this.#textDocument.lineCount\n );\n if (\n this.#grammar === undefined &&\n !isGrammarlessLanguage(this.#textDocument.languageId)\n ) {\n await this.#highlighter.loadLanguage(this.#textDocument.languageId);\n if (this.#isCleanedUp) {\n return;\n }\n this.#grammar = this.#highlighter.getLanguage(\n this.#textDocument.languageId\n );\n }\n this.#ensureActiveTheme();\n this.#scheduleStatePrebuild(endLine);\n }, 500);\n\n #onMessage = ({ data }: MessageEvent<unknown>) => {\n if (typeof data !== 'object' || data === null) {\n return;\n }\n const { type, tokenizerId, jobId } = data as {\n type?: unknown;\n tokenizerId?: unknown;\n jobId?: unknown;\n };\n if (\n type === 'tokenize' &&\n tokenizerId === this.#tokenizerId &&\n typeof jobId === 'number' &&\n jobId === this.#backgroundJobId\n ) {\n if (this.#backgroundPrebuildEndLine >= 0) {\n this.#backgroundPrebuild(jobId);\n } else {\n this.#backgroundTokenize(jobId);\n }\n }\n };\n\n get themeType(): 'light' | 'dark' {\n return this.#themeType;\n }\n\n getStringCommentRegexpRangesInLine(\n lineIndex: number\n ): [number, number][] | null {\n if (\n !this.#matchBrackets ||\n lineIndex < 0 ||\n lineIndex >= this.#textDocument.lineCount\n ) {\n return null;\n }\n this.#ensureGrammar();\n if (this.#grammar === undefined) {\n return null;\n }\n if (this.#bracketIgnoredRanges[lineIndex] === undefined) {\n this.#buildStateStack(lineIndex);\n const state = this.#stateStack[lineIndex] ?? INITIAL;\n const result = this.#tokenizeLineAt(lineIndex, state);\n this.#stateStack[lineIndex + 1] = result.state;\n }\n return this.#bracketIgnoredRanges[lineIndex] ?? null;\n }\n\n constructor({\n codeOptions,\n highlighter,\n textDocument,\n matchBrackets,\n setStyle,\n onDeferTokenize,\n onThemeChange,\n __debug,\n }: EditorTokenizerProps) {\n const {\n themeType: themeTypeOption = 'system',\n theme = DEFAULT_THEMES,\n tokenizeMaxLineLength = 1000,\n } = codeOptions;\n this.#mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');\n let themeType: 'light' | 'dark' | undefined;\n if (themeTypeOption === 'system') {\n // Prefer the host document's computed color-scheme (page CSS/classes can\n // force light/dark while the OS media query differs) over matchMedia.\n themeType = this.#resolveSystemThemeType();\n } else {\n themeType = themeTypeOption;\n }\n // Only track the document/system color scheme when the surface follows it\n // (`themeType: 'system'`). A surface pinned to an explicit 'dark'/'light'\n // theme keeps that theme regardless of the page, so re-tokenizing after an\n // edit must emit the same `--diffs-token-{theme}` variable the SSR markup\n // used; otherwise the edited tokens fall back to the default foreground.\n if (typeof theme !== 'string' && themeTypeOption === 'system') {\n const observer = new MutationObserver((mutations) => {\n for (const { type, attributeName } of mutations) {\n if (\n type === 'attributes' &&\n attributeName !== null &&\n (attributeName === 'class' || attributeName.startsWith('data-'))\n ) {\n const themeType = this.#resolveSystemThemeType();\n this.#emitThemeChange(theme[themeType], themeType);\n break;\n }\n }\n });\n observer.observe(document.documentElement, { attributes: true });\n observer.observe(document.body, { attributes: true });\n this.#disposes = [\n addEventListener(this.#mediaQueryList, 'change', () => {\n // Re-read computed color-scheme so a host-forced scheme still wins\n // when the OS preference changes underneath it.\n const themeType = this.#resolveSystemThemeType();\n this.#emitThemeChange(theme[themeType], themeType);\n }),\n () => observer.disconnect(),\n ];\n }\n this.#highlighter = highlighter;\n this.#textDocument = textDocument;\n this.#tokenizeMaxLineLength = tokenizeMaxLineLength;\n this.#setStyle = setStyle;\n this.#onDeferTokenize = onDeferTokenize;\n this.#onThemeChange = onThemeChange;\n this.#matchBrackets = matchBrackets !== false;\n this.#debug = __debug ?? false;\n this.#ensureGrammar();\n this.#colorMap = [];\n this.#setTheme(\n typeof theme === 'string' ? theme : theme[themeType],\n typeof theme === 'string' ? undefined : themeType\n );\n }\n\n // By default, diffs components support dual themes, but the tokenizer only renders\n // the preferred theme. When the theme type is changed, the tokenizer will re-tokenize the document.\n #emitThemeChange(themeName: string, themeType: 'light' | 'dark') {\n if (themeName === this.#themeName && themeType === this.#themeType) {\n return;\n }\n this.#setTheme(themeName, themeType);\n this.stopBackgroundTokenize();\n this.#stateStack = [INITIAL];\n this.#comparisonStateStack = [];\n this.#comparisonStateStackStart = 0;\n this.#comparisonLineChanges = [];\n if (this.#grammar !== undefined && this.#textDocument.lineCount > 0) {\n this.#scheduleBackgroundTokenize(0);\n }\n // The theme CSS is now applied, so overlay pieces that captured a resolved\n // theme color (e.g. rounded selection corner masks) can recompute against\n // the new colors instead of keeping the old light/dark value.\n this.#onThemeChange?.();\n }\n\n // Respect an explicit host color-scheme override. When the computed value\n // advertises support for both schemes, let the OS preference choose one.\n #resolveSystemThemeType(): 'light' | 'dark' {\n try {\n if (\n typeof document !== 'undefined' &&\n typeof getComputedStyle === 'function' &&\n document.body != null\n ) {\n const colorSchemes = getComputedStyle(document.body).colorScheme.split(\n /\\s+/\n );\n const supportsDark = colorSchemes.includes('dark');\n const supportsLight = colorSchemes.includes('light');\n // A single host-forced scheme wins. `light dark` only declares support\n // for both schemes, so the media query still selects the active one.\n if (supportsDark !== supportsLight) {\n return supportsDark ? 'dark' : 'light';\n }\n }\n } catch {\n // jsdom and similar harnesses may lack getComputedStyle or throw; fall\n // through to the OS media query.\n }\n return this.#mediaQueryList.matches ? 'dark' : 'light';\n }\n\n // Re-apply the editor's theme from the surface's current code options. Edit\n // mode reuses a single tokenizer across re-renders, so when the host swaps the\n // theme — a theme picker, a light/dark toggle, etc. — we must recompute the\n // active theme and re-tokenize. Without this the editor keeps rendering the\n // theme it captured when it first attached (stale line-highlight background\n // and token colors). System-driven changes are still handled by the\n // observers wired up in the constructor; this covers explicit `themeType`/\n // `theme` option changes that those observers don't see.\n syncTheme(codeOptions: BaseCodeOptions): void {\n const { themeType = 'system', theme = DEFAULT_THEMES } = codeOptions;\n // A single pinned theme does not follow the themeType option or system\n // scheme flips; its own classification stays authoritative.\n if (typeof theme === 'string') {\n const pinnedThemeType = this.#highlighter.getTheme(theme).type;\n if (theme === this.#themeName && pinnedThemeType === this.#themeType) {\n return;\n }\n this.#emitThemeChange(theme, pinnedThemeType);\n return;\n }\n const nextThemeType =\n themeType === 'system' ? this.#resolveSystemThemeType() : themeType;\n const nextThemeName = theme[nextThemeType];\n if (\n nextThemeType === this.#themeType &&\n nextThemeName === this.#themeName\n ) {\n return;\n }\n this.#emitThemeChange(nextThemeName, nextThemeType);\n }\n\n #setTheme(themeName: string, themeType?: 'light' | 'dark') {\n const { theme, colorMap } = this.#highlighter.setTheme(themeName);\n const { colors = {} } = this.#highlighter.getTheme(themeName);\n const selectionBackground = colors['editor.selectionBackground'];\n const themeLineHighlightBackground =\n colors['editor.lineHighlightBackground'];\n const lineHighlightBackground =\n themeLineHighlightBackground != null &&\n themeLineHighlightBackground.trim() !== '' &&\n !colorUtils.isFullyTransparent(themeLineHighlightBackground)\n ? themeLineHighlightBackground\n : undefined;\n // A usable theme background opts into the semantic active-line mix.\n // Missing backgrounds retain the resolved row color and rely on a border.\n const lineHighlightBorder =\n colors['editor.lineHighlightBorder'] ??\n (lineHighlightBackground == null\n ? 'color-mix(in lab, var(--diffs-bg) 70%, var(--diffs-fg))'\n : 'transparent');\n const activeLineSourceMix =\n lineHighlightBackground == null ? '100%' : '85%';\n const cursorForeground = colors['editorCursor.foreground'];\n const findMatchBackground = colors['editor.findMatchBackground'];\n const findMatchHighlightBackground =\n colors['editor.findMatchHighlightBackground'];\n const bracketMatchBackground = colors['editorBracketMatch.background'];\n const bracketMatchBorder = colors['editorBracketMatch.border'];\n const hintForeground = colors['editorHint.foreground'];\n const infoForeground = colors['editorInfo.foreground'];\n const warningForeground = colors['editorWarning.foreground'];\n const errorForeground = colors['editorError.foreground'];\n this.#setStyle(`:host {\n --diffs-editor-selection-bg: ${selectionBackground ?? 'var(--diffs-line-bg)'};\n --diffs-editor-line-highlight-border: ${lineHighlightBorder};\n --diffs-editor-active-line-source-mix: ${activeLineSourceMix};\n --diffs-editor-match-bg: ${findMatchBackground ?? 'initial'};\n --diffs-editor-match-highlight-bg: ${findMatchHighlightBackground ?? 'initial'};\n --diffs-editor-bracket-match-bg: ${bracketMatchBackground ?? 'initial'};\n --diffs-editor-bracket-match-border: ${bracketMatchBorder ?? 'initial'};\n --diffs-editor-cursor-fg: ${cursorForeground ?? 'initial'};\n --diffs-editor-hint-fg: ${hintForeground ?? 'initial'};\n --diffs-editor-info-fg: ${infoForeground ?? 'initial'};\n --diffs-editor-warning-fg: ${warningForeground ?? 'initial'};\n --diffs-editor-error-fg: ${errorForeground ?? 'initial'};\n }`);\n this.#themeName = themeName;\n this.#themeType = themeType ?? theme.type;\n this.#colorMap = colorMap;\n }\n\n // The shared highlighter is also used for dual-theme SSR (`themes: {dark,light}`),\n // which leaves its active theme on whichever pass finished last (usually light).\n // The tokenizer caches a single-theme colorMap from construction; if we tokenize\n // without re-activating that theme, grammar color indices are looked up in the\n // wrong map — property names resolve to a near-foreground gray while types and\n // comments (stable across maps) still look correct. Re-apply before every\n // tokenize path so a first edit after load matches a later file-switch re-attach.\n #ensureActiveTheme(): void {\n if (this.#themeName === '') {\n return;\n }\n const { colorMap } = this.#highlighter.setTheme(this.#themeName);\n this.#colorMap = colorMap;\n }\n\n cleanUp(): void {\n this.#isCleanedUp = true;\n this.stopBackgroundTokenize();\n this.#detachMessageListener();\n this.#disposes?.forEach((dispose) => dispose());\n this.#disposes = undefined;\n }\n\n // to use `tokenize`, call `prebuildStateStackMap` first to prebuild\n // the state stack map for the given render range.\n tokenize(\n change: TextDocumentChange,\n renderRange?: RenderRange,\n hostRealignsRows = false\n ): Map<number, Array<HighlightedToken>> {\n this.#ensureGrammar();\n this.#ensureActiveTheme();\n if (\n this.#grammar === undefined &&\n !isGrammarlessLanguage(this.#textDocument.languageId)\n ) {\n throw new Error(\n `Grammar for language \"${this.#textDocument.languageId}\" not loaded`\n );\n }\n\n const { lineCount } = this.#textDocument;\n const { startingLine = 0, totalLines = Infinity } = renderRange ?? {};\n const renderRangeEndLine =\n totalLines === Infinity\n ? lineCount\n : Math.min(startingLine + totalLines, lineCount);\n\n const dirtyStart = change.startLine;\n const viewStart = Math.max(startingLine, dirtyStart);\n const crossesRenderRangeEnd =\n renderRange !== undefined &&\n totalLines !== Infinity &&\n change.lineDelta > 0 &&\n dirtyStart < renderRangeEndLine &&\n change.endLine >= renderRangeEndLine;\n const canReuseCachedStates =\n change.lineDelta === 0 &&\n (change.changedLineChanges?.every(([, , lineDelta]) => lineDelta === 0) ??\n true);\n if (this.#matchBrackets && !canReuseCachedStates) {\n // Structural edits shift cache indexes, so only the untouched prefix is\n // safe. Same-line edits overwrite every range they re-tokenize and can\n // retain the untouched suffix once grammar state reconverges.\n this.#bracketIgnoredRanges.length = Math.min(\n this.#bracketIgnoredRanges.length,\n change.startLine\n );\n }\n const canReuseShiftedStates =\n hostRealignsRows && change.lineDelta !== 0 && dirtyStart >= startingLine;\n const canCacheTokenizedStates =\n canReuseCachedStates ||\n renderRange === undefined ||\n dirtyStart >= viewStart;\n const changedLineRanges: readonly [number, number][] =\n change.changedLineRanges ?? [[dirtyStart, change.endLine]];\n this.#comparisonStateStack = [];\n this.#comparisonStateStackStart = 0;\n this.#comparisonLineChanges = [];\n let offscreenSyncEnd = -1;\n if (dirtyStart < viewStart) {\n for (const [rangeStart, rangeEnd] of changedLineRanges) {\n if (rangeStart < viewStart) {\n offscreenSyncEnd = Math.max(\n offscreenSyncEnd,\n Math.min(rangeEnd, viewStart - 1)\n );\n }\n }\n }\n const shouldFlushOffscreenLines =\n offscreenSyncEnd >= dirtyStart &&\n (canReuseCachedStates || change.lineDelta < 0);\n if (canReuseCachedStates) {\n this.#buildStateStack(dirtyStart);\n } else {\n this.#shiftComparisonStateStack(change);\n if (renderRange === undefined || dirtyStart >= viewStart) {\n this.#buildStateStack(viewStart);\n }\n }\n\n let changedRangeIndex = 0;\n let currentChangedRangeEnd = changedLineRanges[changedRangeIndex][1];\n let backgroundStartLine: number | undefined;\n let backgroundChangedRangeIndex = 0;\n let line = canReuseCachedStates\n ? changedLineRanges[changedRangeIndex][0]\n : viewStart;\n let settled = false;\n const dirtyLines: Map<number, Array<HighlightedToken>> = new Map();\n const offscreenDirtyLines:\n | Map<number, Array<HighlightedToken>>\n | undefined = shouldFlushOffscreenLines ? new Map() : undefined;\n if (offscreenDirtyLines !== undefined && !canReuseCachedStates) {\n const offscreenEnd = Math.min(\n offscreenSyncEnd + 1,\n viewStart,\n renderRangeEndLine\n );\n if (offscreenEnd > dirtyStart) {\n this.#buildStateStack(offscreenEnd);\n let offscreenLine = dirtyStart;\n let offscreenState = this.#stateStack[offscreenLine] ?? INITIAL;\n for (; offscreenLine < offscreenEnd; offscreenLine++) {\n const resolved = this.#tokenizeLineAt(offscreenLine, offscreenState);\n offscreenState = resolved.state;\n offscreenDirtyLines.set(offscreenLine, resolved.resolvedTokens);\n }\n this.#stateStack[offscreenEnd] = offscreenState;\n }\n }\n // Seed the loop's grammar state after the offscreen flush, not before it.\n // When a delete's removed lines reach the viewport's first line, the flush\n // rebuilds the cached state up to `line`; reading it earlier would capture\n // the truncated INITIAL state and color the viewport as if outside an open\n // construct (block comment, template literal) it is actually inside.\n let state = this.#stateStack[line] ?? INITIAL;\n for (; line < renderRangeEndLine; ) {\n const previousNextState = canReuseCachedStates\n ? this.#stateStack[line + 1]\n : canReuseShiftedStates\n ? this.#getPreviousEndState(line + 1)\n : undefined;\n if (canCacheTokenizedStates) {\n this.#stateStack[line] = state;\n }\n\n const { resolvedTokens, state: nextState } = this.#tokenizeLineAt(\n line,\n state\n );\n state = nextState;\n\n if (line >= viewStart) {\n dirtyLines.set(line, resolvedTokens);\n } else {\n offscreenDirtyLines?.set(line, resolvedTokens);\n }\n\n if (canCacheTokenizedStates) {\n this.#stateStack[line + 1] = state;\n }\n settled =\n line >= currentChangedRangeEnd &&\n (canReuseCachedStates || canReuseShiftedStates) &&\n previousNextState !== undefined &&\n state.equals(previousNextState);\n if (settled) {\n changedRangeIndex++;\n const nextRange = changedLineRanges[changedRangeIndex];\n if (nextRange === undefined) {\n break;\n }\n if (nextRange[0] >= renderRangeEndLine) {\n backgroundStartLine = nextRange[0];\n backgroundChangedRangeIndex = changedRangeIndex;\n break;\n }\n let nextState: StateStack | undefined = this.#stateStack[nextRange[0]];\n if (canReuseShiftedStates) {\n for (\n let stateLine = line + 2;\n stateLine <= nextRange[0];\n stateLine++\n ) {\n nextState = this.#getPreviousEndState(stateLine);\n if (nextState === undefined) {\n break;\n }\n this.#stateStack[stateLine] = nextState;\n }\n }\n if (nextState === undefined) {\n currentChangedRangeEnd = nextRange[1];\n line++;\n } else {\n line = nextRange[0];\n state = nextState;\n currentChangedRangeEnd = nextRange[1];\n }\n settled = false;\n continue;\n }\n line++;\n }\n\n if (canCacheTokenizedStates) {\n if (line < renderRangeEndLine) {\n this.#stateStack[line + 1] = state;\n } else {\n this.#stateStack[line] = state;\n }\n }\n\n if (settled && canReuseShiftedStates && backgroundStartLine === undefined) {\n for (let stateLine = line + 2; stateLine <= lineCount; stateLine++) {\n const previousState = this.#getPreviousEndState(stateLine);\n if (previousState === undefined) {\n break;\n }\n this.#stateStack[stateLine] = previousState;\n }\n this.#comparisonStateStack = [];\n this.#comparisonStateStackStart = 0;\n this.#comparisonLineChanges = [];\n }\n\n if (offscreenDirtyLines !== undefined && offscreenDirtyLines.size > 0) {\n this.#onDeferTokenize(offscreenDirtyLines, this.#themeType);\n }\n\n if (backgroundStartLine !== undefined) {\n if (this.#matchBrackets && canReuseCachedStates) {\n this.#bracketIgnoredRanges.length = Math.min(\n this.#bracketIgnoredRanges.length,\n backgroundStartLine\n );\n }\n this.#scheduleBackgroundTokenize(\n backgroundStartLine,\n changedLineRanges,\n backgroundChangedRangeIndex\n );\n } else if (!settled && line < lineCount) {\n const backgroundLine =\n crossesRenderRangeEnd && dirtyStart >= viewStart\n ? renderRangeEndLine\n : dirtyStart < viewStart && !canReuseCachedStates\n ? dirtyStart\n : line;\n if (this.#matchBrackets && canReuseCachedStates) {\n this.#bracketIgnoredRanges.length = Math.min(\n this.#bracketIgnoredRanges.length,\n backgroundLine\n );\n }\n this.#scheduleBackgroundTokenize(\n backgroundLine,\n changedLineRanges,\n changedRangeIndex\n );\n }\n\n return dirtyLines;\n }\n\n prebuildStateStack(renderRange?: RenderRange): void {\n this.#ensureGrammar();\n this.#prebuildStateStack(renderRange);\n }\n\n stopBackgroundTokenize(): void {\n this.#pendingPrebuildEndLine = -1;\n if (this.#isStopped) {\n return;\n }\n this.#isStopped = true;\n this.#isPaused = false;\n this.#lastLine = -1;\n this.#backgroundPrebuildEndLine = -1;\n this.#backgroundChangedLineRanges = undefined;\n this.#backgroundChangedRangeIndex = 0;\n this.#comparisonStateStack = [];\n this.#comparisonStateStackStart = 0;\n this.#comparisonLineChanges = [];\n this.#detachMessageListener();\n }\n\n pauseBackgroundTokenize(): void {\n if (this.#isStopped || this.#isPaused) {\n return;\n }\n if (this.#debug) {\n console.log('[diffs/editor] background tokenization paused', {\n jobId: this.#backgroundJobId,\n });\n }\n this.#isPaused = true;\n }\n\n resumeBackgroundTokenize(): void {\n if (\n this.#isStopped ||\n !this.#isPaused ||\n this.#grammar === undefined ||\n this.#lastLine < 0\n ) {\n return;\n }\n if (this.#debug) {\n console.log('[diffs/editor] background tokenization resumed', {\n jobId: this.#backgroundJobId,\n });\n }\n this.#isPaused = false;\n this.#postTokenizeMessage(this.#backgroundJobId);\n }\n\n #ensureGrammar(): void {\n if (\n this.#grammar === undefined &&\n !isGrammarlessLanguage(this.#textDocument.languageId) &&\n this.#highlighter\n .getLoadedLanguages()\n .includes(this.#textDocument.languageId)\n ) {\n this.#grammar = this.#highlighter.getLanguage(\n this.#textDocument.languageId\n );\n }\n }\n\n #attachMessageListener(): void {\n if (this.#isMessageListenerAttached) {\n return;\n }\n globalThis.addEventListener('message', this.#onMessage);\n this.#isMessageListenerAttached = true;\n }\n\n #detachMessageListener(): void {\n if (!this.#isMessageListenerAttached) {\n return;\n }\n globalThis.removeEventListener('message', this.#onMessage);\n this.#isMessageListenerAttached = false;\n }\n\n #postTokenizeMessage(jobId: number): void {\n // use `postMessage` instead of `setTimeout(fn, 0)` to avoid 4ms delay\n globalThis.postMessage({\n type: 'tokenize',\n tokenizerId: this.#tokenizerId,\n jobId,\n });\n }\n\n #scheduleBackgroundTokenize(\n startLine: number,\n changedLineRanges?: readonly [number, number][],\n changedRangeIndex = 0\n ): void {\n if (isGrammarlessLanguage(this.#textDocument.languageId)) {\n return;\n }\n\n const jobId = ++this.#backgroundJobId;\n\n if (this.#debug) {\n console.log('[diffs/editor] background tokenization scheduled', {\n jobId,\n startLine,\n changedLineRanges,\n changedRangeIndex,\n });\n }\n\n this.#isStopped = false;\n this.#isPaused = false;\n this.#lastLine = startLine;\n if (this.#backgroundPrebuildEndLine >= 0) {\n this.#pendingPrebuildEndLine = Math.max(\n this.#pendingPrebuildEndLine,\n this.#backgroundPrebuildEndLine\n );\n }\n this.#backgroundPrebuildEndLine = -1;\n this.#backgroundChangedLineRanges = changedLineRanges;\n this.#backgroundChangedRangeIndex = changedRangeIndex;\n this.#attachMessageListener();\n this.#postTokenizeMessage(jobId);\n }\n\n #scheduleStatePrebuild(endLine: number): void {\n if (this.#grammar === undefined || this.#stateStack.length > endLine) {\n return;\n }\n // Extend an active prebuild, or retain the target until the foreground\n // edit job reconverges and releases the state cache.\n if (!this.#isStopped) {\n if (this.#backgroundPrebuildEndLine >= 0) {\n this.#backgroundPrebuildEndLine = Math.max(\n this.#backgroundPrebuildEndLine,\n endLine\n );\n } else {\n this.#pendingPrebuildEndLine = Math.max(\n this.#pendingPrebuildEndLine,\n endLine\n );\n }\n return;\n }\n\n const jobId = ++this.#backgroundJobId;\n this.#isStopped = false;\n this.#isPaused = false;\n this.#lastLine = this.#stateStack.length - 1;\n this.#backgroundPrebuildEndLine = endLine;\n this.#pendingPrebuildEndLine = -1;\n this.#backgroundChangedLineRanges = undefined;\n this.#backgroundChangedRangeIndex = 0;\n this.#attachMessageListener();\n this.#postTokenizeMessage(jobId);\n }\n\n #tokenizeLineAt(\n line: number,\n state: StateStack\n ): { resolvedTokens: Array<HighlightedToken>; state: StateStack } {\n const lineText = this.#textDocument.getLineText(line);\n if (lineText.length > this.#tokenizeMaxLineLength) {\n console.warn(\n `[diffs] Line(${line}) too long to tokenize: ${lineText.length}`\n );\n this.#cacheBracketIgnoredRanges(line, null);\n return { resolvedTokens: [[0, '', lineText]], state };\n }\n if (\n this.#grammar === undefined ||\n lineText === '' ||\n lineText.trim() === ''\n ) {\n this.#cacheBracketIgnoredRanges(line, null);\n return { resolvedTokens: [[0, '', lineText]], state };\n }\n const result = tokenizeLine(\n this.#grammar,\n this.#colorMap,\n lineText,\n state,\n TOKENIZE_TIME_LIMIT,\n this.#matchBrackets\n );\n this.#cacheBracketIgnoredRanges(line, result.bracketIgnoredRanges);\n return {\n resolvedTokens: result.resolvedTokens,\n state: result.ruleStack,\n };\n }\n\n #cacheBracketIgnoredRanges(\n line: number,\n ranges: [number, number][] | null\n ): void {\n if (this.#matchBrackets) {\n this.#bracketIgnoredRanges[line] = ranges;\n }\n }\n\n // Preserve old end states as comparison-only sentinels, copying whichever\n // side of the edit is smaller. Index shifts are resolved lazily on lookup.\n #shiftComparisonStateStack(change: TextDocumentChange): void {\n const lineChanges =\n change.changedLineChanges ??\n ([[change.startLine, change.endLine, change.lineDelta]] as const);\n const comparisonStart = change.startLine + 1;\n const comparisonLength = this.#stateStack.length - comparisonStart;\n if (comparisonStart <= comparisonLength) {\n this.#comparisonStateStack = this.#stateStack;\n this.#comparisonStateStackStart = 0;\n this.#stateStack = this.#stateStack.slice(0, comparisonStart);\n } else {\n this.#comparisonStateStackStart = comparisonStart;\n this.#comparisonStateStack = this.#stateStack.slice(comparisonStart);\n this.#stateStack.length = Math.min(\n this.#stateStack.length,\n comparisonStart\n );\n }\n this.#comparisonLineChanges = lineChanges;\n }\n\n #getPreviousEndState(line: number): StateStack | undefined {\n let previousLine = line;\n for (\n let index = this.#comparisonLineChanges.length - 1;\n index >= 0;\n index--\n ) {\n const [startLine, endLine, lineDelta] =\n this.#comparisonLineChanges[index];\n if (lineDelta === 0) {\n continue;\n }\n if (previousLine > endLine) {\n previousLine -= lineDelta;\n } else if (previousLine > startLine) {\n return this.#stateStack[line];\n }\n }\n return (\n this.#comparisonStateStack[\n previousLine - this.#comparisonStateStackStart\n ] ?? this.#stateStack[line]\n );\n }\n\n #buildStateStack(endAt: number, timeBudget?: number): boolean {\n const boundedEndAt = Math.min(\n Math.max(0, endAt),\n this.#textDocument.lineCount\n );\n if (this.#stateStack.length > boundedEndAt || this.#grammar === undefined) {\n return true;\n }\n const startedAt = timeBudget === undefined ? 0 : performance.now();\n let line = this.#stateStack.length - 1;\n let state = this.#stateStack[line] ?? INITIAL;\n while (line < boundedEndAt) {\n this.#stateStack[line] = state;\n const lineText = this.#textDocument.getLineText(line);\n if (\n lineText.length <= this.#tokenizeMaxLineLength &&\n lineText !== '' &&\n lineText.trim() !== ''\n ) {\n const result = tokenizeLine(\n this.#grammar,\n this.#colorMap,\n lineText,\n state,\n TOKENIZE_TIME_LIMIT,\n this.#matchBrackets,\n false\n );\n this.#cacheBracketIgnoredRanges(line, result.bracketIgnoredRanges);\n state = result.ruleStack;\n } else {\n this.#cacheBracketIgnoredRanges(line, null);\n }\n line++;\n this.#stateStack[line] = state;\n if (\n timeBudget !== undefined &&\n performance.now() - startedAt > timeBudget\n ) {\n break;\n }\n }\n return line >= boundedEndAt;\n }\n\n #backgroundPrebuild(jobId: number): void {\n if (\n this.#isStopped ||\n this.#isPaused ||\n this.#grammar === undefined ||\n jobId !== this.#backgroundJobId\n ) {\n return;\n }\n\n this.#ensureActiveTheme();\n // State prebuilds intentionally omit rendered tokens and yield between\n // short chunks so a deep viewport does not monopolize the main thread.\n const complete = this.#buildStateStack(this.#backgroundPrebuildEndLine, 1);\n if (this.#isStopped || this.#isPaused || jobId !== this.#backgroundJobId) {\n return;\n }\n if (complete) {\n this.stopBackgroundTokenize();\n return;\n }\n this.#lastLine = this.#stateStack.length - 1;\n this.#postTokenizeMessage(jobId);\n }\n\n #backgroundTokenize(jobId: number) {\n if (\n this.#isStopped ||\n this.#isPaused ||\n this.#grammar === undefined ||\n jobId !== this.#backgroundJobId\n ) {\n return;\n }\n\n this.#ensureActiveTheme();\n\n const t = performance.now();\n const lines = new Map<number, Array<HighlightedToken>>();\n const totalLines = this.#textDocument.lineCount;\n const changedLineRanges = this.#backgroundChangedLineRanges;\n\n let line = this.#lastLine;\n let state = this.#stateStack[line] ?? INITIAL;\n let settled = false;\n let changedRangeIndex = this.#backgroundChangedRangeIndex;\n let currentChangedRangeEnd = changedLineRanges?.[changedRangeIndex]?.[1];\n for (; line < totalLines; ) {\n this.#stateStack[line] = state;\n\n const previousNextState =\n currentChangedRangeEnd !== undefined\n ? this.#getPreviousEndState(line + 1)\n : undefined;\n const lineText = this.#textDocument.getLineText(line);\n if (lineText.length > this.#tokenizeMaxLineLength) {\n console.warn(\n `[diffs] Line(${line}) too long to tokenize: ${lineText.length}`\n );\n lines.set(line, [[0, '', lineText]]);\n this.#cacheBracketIgnoredRanges(line, null);\n } else if (lineText === '' || lineText.trim() === '') {\n lines.set(line, [[0, '', lineText]]);\n this.#cacheBracketIgnoredRanges(line, null);\n } else {\n const ret = tokenizeLine(\n this.#grammar,\n this.#colorMap,\n lineText,\n state,\n TOKENIZE_TIME_LIMIT,\n this.#matchBrackets\n );\n lines.set(line, ret.resolvedTokens);\n this.#cacheBracketIgnoredRanges(line, ret.bracketIgnoredRanges);\n state = ret.ruleStack;\n }\n\n this.#stateStack[line + 1] = state;\n settled =\n currentChangedRangeEnd !== undefined &&\n line >= currentChangedRangeEnd &&\n previousNextState !== undefined &&\n state.equals(previousNextState);\n line++;\n if (settled) {\n changedRangeIndex++;\n const nextRange = changedLineRanges?.[changedRangeIndex];\n if (nextRange === undefined) {\n break;\n }\n currentChangedRangeEnd = nextRange[1];\n if (this.#stateStack[nextRange[0]] === undefined) {\n settled = false;\n } else {\n line = nextRange[0];\n state = this.#stateStack[line] ?? state;\n settled = false;\n continue;\n }\n }\n\n // limit the time of partial tokenize to 1ms\n if (performance.now() - t > 1) {\n break;\n }\n }\n\n this.#onDeferTokenize(lines, this.#themeType);\n if (this.#isStopped || this.#isPaused || jobId !== this.#backgroundJobId) {\n return;\n }\n\n if (settled || line >= totalLines) {\n const pendingPrebuildEndLine = this.#pendingPrebuildEndLine;\n this.stopBackgroundTokenize();\n if (pendingPrebuildEndLine >= 0) {\n this.#scheduleStatePrebuild(pendingPrebuildEndLine);\n }\n return;\n }\n\n this.#lastLine = line;\n this.#backgroundChangedRangeIndex = changedRangeIndex;\n this.#postTokenizeMessage(jobId);\n }\n}\n\nfunction tokenizeLine(\n grammar: IGrammar,\n colorMap: string[],\n lineText: string,\n stateStack: StateStack,\n timeLimit?: number,\n collectBracketIgnoredRanges = true,\n resolveTokens = true\n): {\n ruleStack: StateStack;\n resolvedTokens: Array<HighlightedToken>;\n bracketIgnoredRanges: [number, number][];\n} {\n const result = grammar.tokenizeLine2(lineText, stateStack, timeLimit);\n if (result.stoppedEarly) {\n console.warn(\n `[diffs] Time limit reached when tokenizing line: ${lineText.substring(0, 100)}`\n );\n }\n const rawTokens = result.tokens;\n const tokensLength = rawTokens.length / 2;\n const resolvedTokens: Array<HighlightedToken> = [];\n const bracketIgnoredRanges: [number, number][] = [];\n if (!resolveTokens && !collectBracketIgnoredRanges) {\n return {\n ruleStack: result.ruleStack,\n resolvedTokens,\n bracketIgnoredRanges,\n };\n }\n for (let j = 0; j < tokensLength; j++) {\n const offset = rawTokens[2 * j];\n const nextOffset =\n j + 1 < tokensLength ? rawTokens[2 * j + 2] : lineText.length;\n if (offset === nextOffset) {\n // should never reach here, skip if happens anyway\n continue;\n }\n const metadata = rawTokens[2 * j + 1];\n if (resolveTokens) {\n const fg = EncodedTokenMetadata.getForeground(metadata);\n resolvedTokens.push([\n offset,\n colorMap[fg],\n lineText.slice(offset, nextOffset),\n ]);\n }\n if (\n collectBracketIgnoredRanges &&\n EncodedTokenMetadata.getTokenType(metadata) > 0\n ) {\n bracketIgnoredRanges.push([offset, nextOffset]);\n }\n }\n return {\n ruleStack: result.ruleStack,\n resolvedTokens,\n bracketIgnoredRanges,\n };\n}\n\nexport function renderLineTokens(\n tokens: Array<HighlightedToken>\n): (HTMLElement | string)[] {\n return tokens.map(([char, fg, textContent]) => {\n if (char === 0 && fg === '') {\n if (textContent === '') {\n return h('br');\n }\n return textContent;\n }\n return h('span', {\n dataset: {\n char: char.toString(),\n },\n style: `color:${fg};`,\n textContent: textContent,\n });\n });\n}\n\n// Shiki special-cases `text` and `ansi` in codeToHast but does not expose grammars.\nfunction isGrammarlessLanguage(languageId: string): boolean {\n return languageId === 'text' || languageId === 'ansi';\n}\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { ChangeTypes, DiffLineAnnotation, FileContents, FileDiffMetadata, Hunk, LineAnnotation, SelectionSide } from "../types.js";
2
2
  import { TextDocument } from "./textDocument.js";
3
3
  import { Editor, EditorOptions } from "./editor.js";
4
-
5
4
  //#region src/editor/types.d.ts
6
5
  /** FileDiff baseline and hunk state needed to resume an editing session. */
7
6
  interface RetainedDiffSessionSnapshot {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/editor/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/editor/types.ts"],"mappings":";;;;;UAaiB;EACf;IAAW;IAAc;;EACzB,MAAM;EACN,OAAO;;;UAIQ;EACf,aAAa;EACb;;;;;;;;KASU;UAEK;EACf;EACA,OAAO;;KAGG;;KAGA,cAAc,aAAa,UAAU,cAAc,YAC7D,YAAY,OACZ,SAAS,cAAc,OAAO,aAAa,QAC3C,0BACG,OAAO,OAAO,aAAa;;;;;;;;;;;UAYf;;;;;;;;;;WAUN;;;;;;;;;;WAUA;;;;;;;;;;;;;;;UAgBM;;;;WAIN,OAAO;;;;WAIP,KAAK;;;;;UAMC;;;;;WAKN,OAAO;;;;;WAKP;;;UAIM;;WAEN;;WAEA;;WAEA;;;UAIM,qBAAqB;;EAEpC,OAAO;;KAGG,qBACV,cAAc,aAAa,YAC3B,yBACE,uBACA,eAAe;EAAiB;IAChC,mBAAmB;;KAGX,kBACV,cAAc,YACd,aACA,SACE,cAAc;EAEZ,SAAS;EACT,MAAM;EACN,QAAQ,OAAO,OAAO,aAAa;EACnC,kBAAkB,qBAAqB,OAAO;;;;;;;;KAUxC;UAEK,wBAAwB;EACvC,WAAW;;;UAII;;EAEf;;;;;;;UAQe,YAAY;EAC3B,QAAQ;EACR,OAAO;EACP,UAAU,IAAI;;UAGC;;EAEf;;EAEA;;UAGe;EACf,aAAa;EACb,OAAO;;;;;;;;;;;;;;;;;;UAmBQ,sBAAsB,aAAa;EAClD,MAAM;EACN,QAAQ,eAAe,aAAa;EACpC,iBAAiB,eAAe;EAChC,cAAc;EACd,yBAAyB,eAAe;;;;;;;;;;;;;;;;;;;;;;UAuBzB,0BAA0B,aAAa;EACtD,UAAU;EACV,QAAQ,oBAAoB,aAAa;EACzC,kBAAkB;EAClB,SAAS;EACT,SAAS;EACT,iBAAiB,mBAAmB;EACpC,yBAAyB,mBAAmB;;;;;;KAOlC,wBACV,cAAc,YACd,aACA,SACE,uBACA,sBAAsB,aAAa,SACnC,0BAA0B,aAAa;KAE/B;;UAGK,iBACf,cAAc,YACd;EAEA,cAAc;EACd,cAAc;EACd;EACA;EACA,mBAAmB;EACnB,kBAAkB;EAClB,wBAAwB,qBAAqB,OAAO;EACpD,uBAAuB,qBAAqB,OAAO;EACnD,iBAAiB;EACjB;;;UAIe,iBACf,cAAc,YACd;EAEA,WAAW,iBAAiB,OAAO;EACnC,WAAW,iBAAiB,OAAO;EACnC;EACA;;UAGQ,cAAc,cAAc,YAAY;EAChD,UAAU,aAAa,OAAO;EAC9B,UAAU,KAAK;EACf,QAAQ;;UAGO,cAAc,+BAA+B,sBAE5D;EAEA;EACA;;UAGe,kBAAkB,+BAA+B,2BAEhE;EAEA;EACA,aAAa;;;;;;KAOH,UACV,cAAc,aAAa,YAC3B,yBACE,uBACA,cAAc,eACd,kBAAkB;;KAGV,mBACV,cAAc,aAAa,YAC3B,yBACE;EACE;IAAiB,QAAQ,KAAK,cAAc;EAC5C;IAAsB,QACtB,KAAK,kBAAkB"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/editor/utils.ts"],"mappings":";iBAAgB,CAAA,iBAAkB,qBAAA,EAChC,OAAA,EAAS,CAAA,EACT,KAAA;EACE,KAAA,YAAiB,OAAA,CAAQ,mBAAA;EACzB,OAAA,GAAU,YAAA;EACV,QAAA,IAAY,IAAA;AAAA,IACV,OAAA,CAAQ,IAAA,CAAK,qBAAA,CAAsB,CAAA,uCACvC,MAAA,GAAS,OAAA,GAAU,UAAA,GAAa,gBAAA,GAC/B,qBAAA,CAAsB,CAAA;AAAA,iBA+BT,SAAA,IAAa,KAAA,EAAO,CAAA,GAAI,OAAA,CAAQ,CAAA,IAAK,KAAA,IAAS,OAAA,CAAQ,CAAA;AAAA,iBAStD,gBAAA,iBAAiC,mBAAA,EAC/C,EAAA,EAAI,WAAA,EACJ,KAAA,EAAO,CAAA,EACP,QAAA,GAAW,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,mBAAA,CAAoB,CAAA,YACvD,OAAA,GAAU,uBAAA;AAAA,iBAEI,gBAAA,iBAAiC,gBAAA,EAC/C,EAAA,EAAI,QAAA,EACJ,KAAA,EAAO,CAAA,EACP,QAAA,GAAW,IAAA,EAAM,QAAA,EAAU,GAAA,EAAK,gBAAA,CAAiB,CAAA,YACjD,OAAA,GAAU,uBAAA;AAAA,iBAEI,gBAAA,iBAAiC,cAAA,EAC/C,EAAA,EAAI,MAAA,EACJ,KAAA,EAAO,CAAA,EACP,QAAA,GAAW,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,cAAA,CAAe,CAAA,YAC7C,OAAA,GAAU,uBAAA;AAAA,iBAEI,gBAAA,iBAAiC,sBAAA,EAC/C,EAAA,EAAI,cAAA,EACJ,KAAA,EAAO,CAAA,EACP,QAAA,GAAW,IAAA,EAAM,cAAA,EAAgB,GAAA,EAAK,sBAAA,CAAuB,CAAA,YAC7D,OAAA,GAAU,uBAAA;AAAA,iBAYI,iBAAA,CACd,EAAA,EAAI,WAAW,EACf,GAAA;AAAA,iBAac,cAAA,CAAe,IAAA,EAAM,IAAI,EAAE,MAAA;AAAA,iBAW3B,MAAA,mBAAyB,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,OAAA,CAAQ,CAAA,IAAK,CAAA;AAAA,iBAKrD,QAAA,eAAuB,IAAA,kBACrC,IAAA,EAAM,CAAA,EACN,IAAA,eACK,IAAA,EAAM,UAAA,CAAW,CAAA;AAAA,iBAQR,KAAA,CAAM,KAAA,UAAe,SAAwB;AAAA,iBAI7C,iBAAA,CAAkB,IAAY;AAAA,iBAM9B,eAAA,CACd,OAAA,EAAS,IAAA,CAAK,gBAAA,GACb,IAAA,CAAK,SAAS;AAAA,iBAYD,oBAAA,IAAwB,IAAA,CAAK,SAAS;AAAA,iBAStC,qBAAA,CACd,OAAA,EAAS,WAAA,GACR,WAAA,GAAc,QAAA"}
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/editor/utils.ts"],"mappings":";iBAAgB,EAAE,gBAAgB,uBAChC,SAAS,GACT;EACE,iBAAiB,QAAQ;EACzB,UAAU;EACV,YAAY;IACV,QAAQ,KAAK,sBAAsB,wCACvC,SAAS,UAAU,aAAa,mBAC/B,sBAAsB;iBA+BT,UAAU,GAAG,OAAO,IAAI,QAAQ,KAAK,SAAS,QAAQ;iBAStD,iBAAiB,gBAAgB,qBAC/C,IAAI,aACJ,OAAO,GACP,WAAW,MAAM,aAAa,KAAK,oBAAoB,aACvD,UAAU;iBAEI,iBAAiB,gBAAgB,kBAC/C,IAAI,UACJ,OAAO,GACP,WAAW,MAAM,UAAU,KAAK,iBAAiB,aACjD,UAAU;iBAEI,iBAAiB,gBAAgB,gBAC/C,IAAI,QACJ,OAAO,GACP,WAAW,MAAM,QAAQ,KAAK,eAAe,aAC7C,UAAU;iBAEI,iBAAiB,gBAAgB,wBAC/C,IAAI,gBACJ,OAAO,GACP,WAAW,MAAM,gBAAgB,KAAK,uBAAuB,aAC7D,UAAU;iBAYI,kBACd,IAAI,aACJ;iBAac,eAAe,MAAM,MAAM;iBAW3B,OAAO,kBAAkB,KAAK,GAAG,OAAO,QAAQ,KAAK;iBAKrD,SAAS,cAAc,sBACrC,MAAM,GACN,mBACK,MAAM,WAAW;iBAQR,MAAM,eAAe;iBAIrB,kBAAkB;iBAMlB,gBACd,SAAS,KAAK,mBACb,KAAK;iBAYQ,wBAAwB,KAAK;iBAS7B,sBACd,SAAS,cACR,cAAc"}
@@ -3,13 +3,17 @@ function h(tagName, props, parent) {
3
3
  const { style, dataset, children, ...attrs } = props ?? {};
4
4
  const el = document.createElement(tagName);
5
5
  Object.assign(el, attrs);
6
- if (style !== void 0) if (typeof style === "string") el.style.cssText = style;
7
- else Object.assign(el.style, style);
8
- if (dataset !== void 0) if (typeof dataset === "string") el.dataset[dataset] = "";
9
- else if (Array.isArray(dataset)) dataset.forEach((key) => {
10
- el.dataset[key] = "";
11
- });
12
- else Object.assign(el.dataset, dataset);
6
+ if (style !== void 0) {
7
+ if (typeof style === "string") el.style.cssText = style;
8
+ else Object.assign(el.style, style);
9
+ }
10
+ if (dataset !== void 0) {
11
+ if (typeof dataset === "string") el.dataset[dataset] = "";
12
+ else if (Array.isArray(dataset)) dataset.forEach((key) => {
13
+ el.dataset[key] = "";
14
+ });
15
+ else Object.assign(el.dataset, dataset);
16
+ }
13
17
  if (children !== void 0) el.replaceChildren(...children);
14
18
  if (parent !== void 0) parent.appendChild(el);
15
19
  return el;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../src/editor/utils.ts"],"sourcesContent":["export function h<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n props?: {\n style?: string | Partial<CSSStyleDeclaration>;\n dataset?: DOMStringMap | string[] | string;\n children?: (Node | string)[];\n } & Partial<Omit<HTMLElementTagNameMap[K], 'style' | 'dataset' | 'children'>>,\n parent?: Element | ShadowRoot | DocumentFragment\n): HTMLElementTagNameMap[K] {\n const { style, dataset, children, ...attrs } = props ?? {};\n const el = document.createElement(tagName);\n Object.assign(el, attrs);\n if (style !== undefined) {\n if (typeof style === 'string') {\n el.style.cssText = style;\n } else {\n Object.assign(el.style, style);\n }\n }\n if (dataset !== undefined) {\n if (typeof dataset === 'string') {\n el.dataset[dataset] = '';\n } else if (Array.isArray(dataset)) {\n dataset.forEach((key) => {\n el.dataset[key] = '';\n });\n } else {\n Object.assign(el.dataset, dataset);\n }\n }\n if (children !== undefined) {\n el.replaceChildren(...children);\n }\n if (parent !== undefined) {\n parent.appendChild(el);\n }\n return el;\n}\n\nexport function isPromise<T>(value: T | Promise<T>): value is Promise<T> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'then' in value &&\n typeof value.then === 'function'\n );\n}\n\nexport function addEventListener<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n event: K,\n listener: (this: HTMLElement, evt: HTMLElementEventMap[K]) => void,\n options?: AddEventListenerOptions\n): () => void;\nexport function addEventListener<K extends keyof DocumentEventMap>(\n el: Document,\n event: K,\n listener: (this: Document, evt: DocumentEventMap[K]) => void,\n options?: AddEventListenerOptions\n): () => void;\nexport function addEventListener<K extends keyof WindowEventMap>(\n el: Window,\n event: K,\n listener: (this: Window, evt: WindowEventMap[K]) => void,\n options?: AddEventListenerOptions\n): () => void;\nexport function addEventListener<K extends keyof MediaQueryListEventMap>(\n el: MediaQueryList,\n event: K,\n listener: (this: MediaQueryList, evt: MediaQueryListEventMap[K]) => void,\n options?: AddEventListenerOptions\n): () => void;\nexport function addEventListener(\n el: HTMLElement | Document | ShadowRoot | Window | MediaQueryList,\n event: string,\n listener: EventListener,\n options?: AddEventListenerOptions\n) {\n el.addEventListener(event, listener, options);\n return () => el.removeEventListener(event, listener, options);\n}\n\nexport function getLineNumberAttr(\n el: HTMLElement,\n key = 'line'\n): number | undefined {\n const value = el.dataset[key];\n if (value === undefined) {\n return undefined;\n }\n const lineNumber = parseInt(value, 10);\n if (Number.isNaN(lineNumber)) {\n return undefined;\n }\n return lineNumber;\n}\n\nexport function clampDomOffset(node: Node, offset: number): number {\n if (node.nodeType === 3) {\n const length = (node as Text).textContent?.length ?? 0;\n return Math.max(0, Math.min(offset, length));\n }\n if (node.nodeType === 1) {\n return Math.max(0, Math.min(offset, node.childNodes.length));\n }\n return 0;\n}\n\nexport function extend<T extends object>(obj: T, attrs: Partial<T>): T {\n return Object.assign(obj, attrs);\n}\n\n// oxlint-disable-next-line typescript/no-explicit-any\nexport function debounce<T extends (...args: any[]) => void>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return function (this: ThisType<T>, ...args: Parameters<T>) {\n clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, args), wait);\n };\n}\n\nexport function round(value: number, precision: number = 1000): number {\n return Math.round(value * precision) / precision;\n}\n\nexport function endsWithLineBreak(text: string): boolean {\n return text.endsWith('\\n') || text.endsWith('\\r');\n}\n\n// Creates an Intl.Segmenter, or undefined when the engine lacks support.\n// Callers must fall back to a degraded path when this returns undefined.\nexport function createSegmenter(\n options: Intl.SegmenterOptions\n): Intl.Segmenter | undefined {\n if (typeof Intl === 'undefined' || typeof Intl.Segmenter !== 'function') {\n return undefined;\n }\n return new Intl.Segmenter(undefined, options);\n}\n\n// Lazily created and cached grapheme segmenter. Avoids constructing\n// Intl.Segmenter at import time so importing the editor never throws on\n// engines that lack it. Undefined when the engine has no Intl.Segmenter.\nlet graphemeSegmenter: Intl.Segmenter | undefined;\nlet graphemeSegmenterInit = false;\nexport function getGraphemeSegmenter(): Intl.Segmenter | undefined {\n if (!graphemeSegmenterInit) {\n graphemeSegmenter = createSegmenter({ granularity: 'grapheme' });\n graphemeSegmenterInit = true;\n }\n return graphemeSegmenter;\n}\n\n// lookup the scroll container for the given element\nexport function lookupScrollContainer(\n element: HTMLElement\n): HTMLElement | Document {\n const ownerDocument = element.ownerDocument;\n let parentElement = element.parentElement;\n while (\n parentElement != null &&\n parentElement !== ownerDocument.body &&\n parentElement !== ownerDocument.documentElement\n ) {\n const overflowY =\n parentElement.ownerDocument.defaultView?.getComputedStyle(\n parentElement\n ).overflowY;\n if (\n overflowY === 'auto' ||\n overflowY === 'scroll' ||\n overflowY === 'overlay'\n ) {\n return parentElement;\n }\n parentElement = parentElement.parentElement;\n }\n return ownerDocument;\n}\n"],"mappings":";AAAA,SAAgB,EACd,SACA,OAKA,QAC0B;CAC1B,MAAM,EAAE,OAAO,SAAS,UAAU,GAAG,UAAU,SAAS,CAAC;CACzD,MAAM,KAAK,SAAS,cAAc,OAAO;CACzC,OAAO,OAAO,IAAI,KAAK;CACvB,IAAI,UAAU,KAAA,GACZ,IAAI,OAAO,UAAU,UACnB,GAAG,MAAM,UAAU;MAEnB,OAAO,OAAO,GAAG,OAAO,KAAK;CAGjC,IAAI,YAAY,KAAA,GACd,IAAI,OAAO,YAAY,UACrB,GAAG,QAAQ,WAAW;MACjB,IAAI,MAAM,QAAQ,OAAO,GAC9B,QAAQ,SAAS,QAAQ;EACvB,GAAG,QAAQ,OAAO;CACpB,CAAC;MAED,OAAO,OAAO,GAAG,SAAS,OAAO;CAGrC,IAAI,aAAa,KAAA,GACf,GAAG,gBAAgB,GAAG,QAAQ;CAEhC,IAAI,WAAW,KAAA,GACb,OAAO,YAAY,EAAE;CAEvB,OAAO;AACT;AAEA,SAAgB,UAAa,OAA4C;CACvE,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,OAAO,MAAM,SAAS;AAE1B;AA0BA,SAAgB,iBACd,IACA,OACA,UACA,SACA;CACA,GAAG,iBAAiB,OAAO,UAAU,OAAO;CAC5C,aAAa,GAAG,oBAAoB,OAAO,UAAU,OAAO;AAC9D;AAEA,SAAgB,kBACd,IACA,MAAM,QACc;CACpB,MAAM,QAAQ,GAAG,QAAQ;CACzB,IAAI,UAAU,KAAA,GACZ;CAEF,MAAM,aAAa,SAAS,OAAO,EAAE;CACrC,IAAI,OAAO,MAAM,UAAU,GACzB;CAEF,OAAO;AACT;AAEA,SAAgB,eAAe,MAAY,QAAwB;CACjE,IAAI,KAAK,aAAa,GAAG;EACvB,MAAM,SAAU,KAAc,aAAa,UAAU;EACrD,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,MAAM,CAAC;CAC7C;CACA,IAAI,KAAK,aAAa,GACpB,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,KAAK,WAAW,MAAM,CAAC;CAE7D,OAAO;AACT;AAEA,SAAgB,OAAyB,KAAQ,OAAsB;CACrE,OAAO,OAAO,OAAO,KAAK,KAAK;AACjC;AAGA,SAAgB,SACd,MACA,MACkC;CAClC,IAAI;CACJ,OAAO,SAA6B,GAAG,MAAqB;EAC1D,aAAa,OAAO;EACpB,UAAU,iBAAiB,KAAK,MAAM,MAAM,IAAI,GAAG,IAAI;CACzD;AACF;AAEA,SAAgB,MAAM,OAAe,YAAoB,KAAc;CACrE,OAAO,KAAK,MAAM,QAAQ,SAAS,IAAI;AACzC;AAEA,SAAgB,kBAAkB,MAAuB;CACvD,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI;AAClD;AAIA,SAAgB,gBACd,SAC4B;CAC5B,IAAI,OAAO,SAAS,eAAe,OAAO,KAAK,cAAc,YAC3D;CAEF,OAAO,IAAI,KAAK,UAAU,KAAA,GAAW,OAAO;AAC9C;AAKA,IAAI;AACJ,IAAI,wBAAwB;AAC5B,SAAgB,uBAAmD;CACjE,IAAI,CAAC,uBAAuB;EAC1B,oBAAoB,gBAAgB,EAAE,aAAa,WAAW,CAAC;EAC/D,wBAAwB;CAC1B;CACA,OAAO;AACT;AAGA,SAAgB,sBACd,SACwB;CACxB,MAAM,gBAAgB,QAAQ;CAC9B,IAAI,gBAAgB,QAAQ;CAC5B,OACE,iBAAiB,QACjB,kBAAkB,cAAc,QAChC,kBAAkB,cAAc,iBAChC;EACA,MAAM,YACJ,cAAc,cAAc,aAAa,iBACvC,aACF,CAAC,CAAC;EACJ,IACE,cAAc,UACd,cAAc,YACd,cAAc,WAEd,OAAO;EAET,gBAAgB,cAAc;CAChC;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../src/editor/utils.ts"],"sourcesContent":["export function h<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n props?: {\n style?: string | Partial<CSSStyleDeclaration>;\n dataset?: DOMStringMap | string[] | string;\n children?: (Node | string)[];\n } & Partial<Omit<HTMLElementTagNameMap[K], 'style' | 'dataset' | 'children'>>,\n parent?: Element | ShadowRoot | DocumentFragment\n): HTMLElementTagNameMap[K] {\n const { style, dataset, children, ...attrs } = props ?? {};\n const el = document.createElement(tagName);\n Object.assign(el, attrs);\n if (style !== undefined) {\n if (typeof style === 'string') {\n el.style.cssText = style;\n } else {\n Object.assign(el.style, style);\n }\n }\n if (dataset !== undefined) {\n if (typeof dataset === 'string') {\n el.dataset[dataset] = '';\n } else if (Array.isArray(dataset)) {\n dataset.forEach((key) => {\n el.dataset[key] = '';\n });\n } else {\n Object.assign(el.dataset, dataset);\n }\n }\n if (children !== undefined) {\n el.replaceChildren(...children);\n }\n if (parent !== undefined) {\n parent.appendChild(el);\n }\n return el;\n}\n\nexport function isPromise<T>(value: T | Promise<T>): value is Promise<T> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'then' in value &&\n typeof value.then === 'function'\n );\n}\n\nexport function addEventListener<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n event: K,\n listener: (this: HTMLElement, evt: HTMLElementEventMap[K]) => void,\n options?: AddEventListenerOptions\n): () => void;\nexport function addEventListener<K extends keyof DocumentEventMap>(\n el: Document,\n event: K,\n listener: (this: Document, evt: DocumentEventMap[K]) => void,\n options?: AddEventListenerOptions\n): () => void;\nexport function addEventListener<K extends keyof WindowEventMap>(\n el: Window,\n event: K,\n listener: (this: Window, evt: WindowEventMap[K]) => void,\n options?: AddEventListenerOptions\n): () => void;\nexport function addEventListener<K extends keyof MediaQueryListEventMap>(\n el: MediaQueryList,\n event: K,\n listener: (this: MediaQueryList, evt: MediaQueryListEventMap[K]) => void,\n options?: AddEventListenerOptions\n): () => void;\nexport function addEventListener(\n el: HTMLElement | Document | ShadowRoot | Window | MediaQueryList,\n event: string,\n listener: EventListener,\n options?: AddEventListenerOptions\n) {\n el.addEventListener(event, listener, options);\n return () => el.removeEventListener(event, listener, options);\n}\n\nexport function getLineNumberAttr(\n el: HTMLElement,\n key = 'line'\n): number | undefined {\n const value = el.dataset[key];\n if (value === undefined) {\n return undefined;\n }\n const lineNumber = parseInt(value, 10);\n if (Number.isNaN(lineNumber)) {\n return undefined;\n }\n return lineNumber;\n}\n\nexport function clampDomOffset(node: Node, offset: number): number {\n if (node.nodeType === 3) {\n const length = (node as Text).textContent?.length ?? 0;\n return Math.max(0, Math.min(offset, length));\n }\n if (node.nodeType === 1) {\n return Math.max(0, Math.min(offset, node.childNodes.length));\n }\n return 0;\n}\n\nexport function extend<T extends object>(obj: T, attrs: Partial<T>): T {\n return Object.assign(obj, attrs);\n}\n\n// oxlint-disable-next-line typescript/no-explicit-any\nexport function debounce<T extends (...args: any[]) => void>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return function (this: ThisType<T>, ...args: Parameters<T>) {\n clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, args), wait);\n };\n}\n\nexport function round(value: number, precision: number = 1000): number {\n return Math.round(value * precision) / precision;\n}\n\nexport function endsWithLineBreak(text: string): boolean {\n return text.endsWith('\\n') || text.endsWith('\\r');\n}\n\n// Creates an Intl.Segmenter, or undefined when the engine lacks support.\n// Callers must fall back to a degraded path when this returns undefined.\nexport function createSegmenter(\n options: Intl.SegmenterOptions\n): Intl.Segmenter | undefined {\n if (typeof Intl === 'undefined' || typeof Intl.Segmenter !== 'function') {\n return undefined;\n }\n return new Intl.Segmenter(undefined, options);\n}\n\n// Lazily created and cached grapheme segmenter. Avoids constructing\n// Intl.Segmenter at import time so importing the editor never throws on\n// engines that lack it. Undefined when the engine has no Intl.Segmenter.\nlet graphemeSegmenter: Intl.Segmenter | undefined;\nlet graphemeSegmenterInit = false;\nexport function getGraphemeSegmenter(): Intl.Segmenter | undefined {\n if (!graphemeSegmenterInit) {\n graphemeSegmenter = createSegmenter({ granularity: 'grapheme' });\n graphemeSegmenterInit = true;\n }\n return graphemeSegmenter;\n}\n\n// lookup the scroll container for the given element\nexport function lookupScrollContainer(\n element: HTMLElement\n): HTMLElement | Document {\n const ownerDocument = element.ownerDocument;\n let parentElement = element.parentElement;\n while (\n parentElement != null &&\n parentElement !== ownerDocument.body &&\n parentElement !== ownerDocument.documentElement\n ) {\n const overflowY =\n parentElement.ownerDocument.defaultView?.getComputedStyle(\n parentElement\n ).overflowY;\n if (\n overflowY === 'auto' ||\n overflowY === 'scroll' ||\n overflowY === 'overlay'\n ) {\n return parentElement;\n }\n parentElement = parentElement.parentElement;\n }\n return ownerDocument;\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { SupportedLanguages } from "../../types.js";
2
-
3
2
  //#region src/highlighter/languages/areLanguagesAttached.d.ts
4
3
  declare function areLanguagesAttached(languages: SupportedLanguages | SupportedLanguages[]): boolean;
5
4
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"areLanguagesAttached.d.ts","names":[],"sources":["../../../src/highlighter/languages/areLanguagesAttached.ts"],"mappings":";;;iBAGgB,oBAAA,CACd,SAAA,EAAW,kBAAA,GAAqB,kBAAkB"}
1
+ {"version":3,"file":"areLanguagesAttached.d.ts","names":[],"sources":["../../../src/highlighter/languages/areLanguagesAttached.ts"],"mappings":";;iBAGgB,qBACd,WAAW,qBAAqB"}
@@ -1,5 +1,6 @@
1
1
  import { DiffsHighlighter } from "../../types.js";
2
2
  import { ResolvedLanguage } from "../../worker/types.js";
3
+ import "../../worker/index.js";
3
4
  //#region src/highlighter/languages/attachResolvedLanguages.d.ts
4
5
  declare function attachResolvedLanguages(resolvedLanguages: ResolvedLanguage | ResolvedLanguage[], highlighter: DiffsHighlighter): void;
5
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"attachResolvedLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/attachResolvedLanguages.ts"],"mappings":";;;iBAIgB,uBAAA,CACd,iBAAA,EAAmB,gBAAA,GAAmB,gBAAA,IACtC,WAAA,EAAa,gBAAA"}
1
+ {"version":3,"file":"attachResolvedLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/attachResolvedLanguages.ts"],"mappings":";;;;iBAIgB,wBACd,mBAAmB,mBAAmB,oBACtC,aAAa"}
@@ -9,8 +9,15 @@ function attachResolvedLanguages(resolvedLanguages, highlighter) {
9
9
  lang = resolvedLang;
10
10
  ResolvedLanguages.set(resolvedLang.name, lang);
11
11
  }
12
- AttachedLanguages.add(lang.name);
12
+ const grammar = lang.data.find((grammar) => grammar.name === lang.name || grammar.aliases?.includes(lang.name) === true);
13
+ if (grammar == null) throw new Error(`attachResolvedLanguages: No returned grammar declares "${lang.name}" as its name or an alias.`);
13
14
  highlighter.loadLanguageSync(lang.data);
15
+ try {
16
+ highlighter.getLanguage(lang.name);
17
+ } catch {
18
+ throw new Error(`attachResolvedLanguages: "${grammar.name}" is already loaded without alias "${lang.name}". Load the alias first or give the grammar a unique name.`);
19
+ }
20
+ AttachedLanguages.add(lang.name);
14
21
  }
15
22
  }
16
23
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"attachResolvedLanguages.js","names":[],"sources":["../../../src/highlighter/languages/attachResolvedLanguages.ts"],"sourcesContent":["import type { DiffsHighlighter } from '../../types';\nimport type { ResolvedLanguage } from '../../worker';\nimport { AttachedLanguages, ResolvedLanguages } from './constants';\n\nexport function attachResolvedLanguages(\n resolvedLanguages: ResolvedLanguage | ResolvedLanguage[],\n highlighter: DiffsHighlighter\n): void {\n resolvedLanguages = Array.isArray(resolvedLanguages)\n ? resolvedLanguages\n : [resolvedLanguages];\n\n for (const resolvedLang of resolvedLanguages) {\n if (AttachedLanguages.has(resolvedLang.name)) continue;\n let lang = ResolvedLanguages.get(resolvedLang.name);\n if (lang == null) {\n lang = resolvedLang;\n ResolvedLanguages.set(resolvedLang.name, lang);\n }\n AttachedLanguages.add(lang.name);\n highlighter.loadLanguageSync(lang.data);\n }\n}\n"],"mappings":";;AAIA,SAAgB,wBACd,mBACA,aACM;CACN,oBAAoB,MAAM,QAAQ,iBAAiB,IAC/C,oBACA,CAAC,iBAAiB;CAEtB,KAAK,MAAM,gBAAgB,mBAAmB;EAC5C,IAAI,kBAAkB,IAAI,aAAa,IAAI,GAAG;EAC9C,IAAI,OAAO,kBAAkB,IAAI,aAAa,IAAI;EAClD,IAAI,QAAQ,MAAM;GAChB,OAAO;GACP,kBAAkB,IAAI,aAAa,MAAM,IAAI;EAC/C;EACA,kBAAkB,IAAI,KAAK,IAAI;EAC/B,YAAY,iBAAiB,KAAK,IAAI;CACxC;AACF"}
1
+ {"version":3,"file":"attachResolvedLanguages.js","names":[],"sources":["../../../src/highlighter/languages/attachResolvedLanguages.ts"],"sourcesContent":["import type { DiffsHighlighter } from '../../types';\nimport type { ResolvedLanguage } from '../../worker';\nimport { AttachedLanguages, ResolvedLanguages } from './constants';\n\nexport function attachResolvedLanguages(\n resolvedLanguages: ResolvedLanguage | ResolvedLanguage[],\n highlighter: DiffsHighlighter\n): void {\n resolvedLanguages = Array.isArray(resolvedLanguages)\n ? resolvedLanguages\n : [resolvedLanguages];\n\n for (const resolvedLang of resolvedLanguages) {\n if (AttachedLanguages.has(resolvedLang.name)) continue;\n let lang = ResolvedLanguages.get(resolvedLang.name);\n if (lang == null) {\n lang = resolvedLang;\n ResolvedLanguages.set(resolvedLang.name, lang);\n }\n const grammar = lang.data.find(\n (grammar) =>\n grammar.name === lang.name ||\n grammar.aliases?.includes(lang.name) === true\n );\n if (grammar == null) {\n throw new Error(\n `attachResolvedLanguages: No returned grammar declares \"${lang.name}\" as its name or an alias.`\n );\n }\n highlighter.loadLanguageSync(lang.data);\n // Shiki can skip an already-loaded grammar, including any newly added aliases.\n try {\n highlighter.getLanguage(lang.name);\n } catch {\n throw new Error(\n `attachResolvedLanguages: \"${grammar.name}\" is already loaded without alias \"${lang.name}\". Load the alias first or give the grammar a unique name.`\n );\n }\n AttachedLanguages.add(lang.name);\n }\n}\n"],"mappings":";;AAIA,SAAgB,wBACd,mBACA,aACM;CACN,oBAAoB,MAAM,QAAQ,iBAAiB,IAC/C,oBACA,CAAC,iBAAiB;CAEtB,KAAK,MAAM,gBAAgB,mBAAmB;EAC5C,IAAI,kBAAkB,IAAI,aAAa,IAAI,GAAG;EAC9C,IAAI,OAAO,kBAAkB,IAAI,aAAa,IAAI;EAClD,IAAI,QAAQ,MAAM;GAChB,OAAO;GACP,kBAAkB,IAAI,aAAa,MAAM,IAAI;EAC/C;EACA,MAAM,UAAU,KAAK,KAAK,MACvB,YACC,QAAQ,SAAS,KAAK,QACtB,QAAQ,SAAS,SAAS,KAAK,IAAI,MAAM,IAC7C;EACA,IAAI,WAAW,MACb,MAAM,IAAI,MACR,0DAA0D,KAAK,KAAK,2BACtE;EAEF,YAAY,iBAAiB,KAAK,IAAI;EAEtC,IAAI;GACF,YAAY,YAAY,KAAK,IAAI;EACnC,QAAQ;GACN,MAAM,IAAI,MACR,6BAA6B,QAAQ,KAAK,qCAAqC,KAAK,KAAK,2DAC3F;EACF;EACA,kBAAkB,IAAI,KAAK,IAAI;CACjC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"cleanUpResolvedLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/cleanUpResolvedLanguages.ts"],"mappings":";iBAEgB,wBAAA"}
1
+ {"version":3,"file":"cleanUpResolvedLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/cleanUpResolvedLanguages.ts"],"mappings":";iBAEgB"}
@@ -1,7 +1,7 @@
1
1
  import { SupportedLanguages } from "../../types.js";
2
2
  import { ResolvedLanguage } from "../../worker/types.js";
3
+ import "../../worker/index.js";
3
4
  import { DynamicImportLanguageRegistration } from "shiki";
4
-
5
5
  //#region src/highlighter/languages/constants.d.ts
6
6
  declare const ResolvedLanguages: Map<SupportedLanguages, ResolvedLanguage>;
7
7
  declare const ResolvingLanguages: Map<SupportedLanguages, Promise<ResolvedLanguage>>;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","names":[],"sources":["../../../src/highlighter/languages/constants.ts"],"mappings":";;;;;cAKa,iBAAA,EAAmB,GAAA,CAAI,kBAAA,EAAoB,gBAAA;AAAA,cAG3C,kBAAA,EAAoB,GAAA,CAC/B,kBAAA,EACA,OAAA,CAAQ,gBAAA;AAAA,cAGG,yBAAA,EAA2B,GAAG,SAEzC,iCAAA;AAAA,cAGW,iBAAA,EAAmB,GAAG"}
1
+ {"version":3,"file":"constants.d.ts","names":[],"sources":["../../../src/highlighter/languages/constants.ts"],"mappings":";;;;;cAKa,mBAAmB,IAAI,oBAAoB;cAG3C,oBAAoB,IAC/B,oBACA,QAAQ;cAGG,2BAA2B,YAEtC;cAGW,mBAAmB"}
@@ -1,5 +1,6 @@
1
1
  import { SupportedLanguages } from "../../types.js";
2
2
  import { ResolvedLanguage } from "../../worker/types.js";
3
+ import "../../worker/index.js";
3
4
  //#region src/highlighter/languages/getResolvedLanguages.d.ts
4
5
  declare function getResolvedLanguages(languages: SupportedLanguages[]): ResolvedLanguage[];
5
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"getResolvedLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/getResolvedLanguages.ts"],"mappings":";;;iBAOgB,oBAAA,CACd,SAAA,EAAW,kBAAA,KACV,gBAAgB"}
1
+ {"version":3,"file":"getResolvedLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/getResolvedLanguages.ts"],"mappings":";;;;iBAOgB,qBACd,WAAW,uBACV"}
@@ -1,5 +1,6 @@
1
1
  import { SupportedLanguages } from "../../types.js";
2
2
  import { ResolvedLanguage } from "../../worker/types.js";
3
+ import "../../worker/index.js";
3
4
  //#region src/highlighter/languages/getResolvedOrResolveLanguage.d.ts
4
5
  declare function getResolvedOrResolveLanguage(language: Exclude<SupportedLanguages, 'text' | 'ansi'>): ResolvedLanguage | Promise<ResolvedLanguage>;
5
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"getResolvedOrResolveLanguage.d.ts","names":[],"sources":["../../../src/highlighter/languages/getResolvedOrResolveLanguage.ts"],"mappings":";;;iBAKgB,4BAAA,CACd,QAAA,EAAU,OAAA,CAAQ,kBAAA,qBACjB,gBAAA,GAAmB,OAAA,CAAQ,gBAAA"}
1
+ {"version":3,"file":"getResolvedOrResolveLanguage.d.ts","names":[],"sources":["../../../src/highlighter/languages/getResolvedOrResolveLanguage.ts"],"mappings":";;;;iBAKgB,6BACd,UAAU,QAAQ,uCACjB,mBAAmB,QAAQ"}
@@ -1,5 +1,4 @@
1
1
  import { SupportedLanguages } from "../../types.js";
2
-
3
2
  //#region src/highlighter/languages/hasResolvedLanguages.d.ts
4
3
  declare function hasResolvedLanguages(languages: SupportedLanguages | SupportedLanguages[]): boolean;
5
4
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"hasResolvedLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/hasResolvedLanguages.ts"],"mappings":";;;iBAGgB,oBAAA,CACd,SAAA,EAAW,kBAAA,GAAqB,kBAAkB"}
1
+ {"version":3,"file":"hasResolvedLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/hasResolvedLanguages.ts"],"mappings":";;iBAGgB,qBACd,WAAW,qBAAqB"}
@@ -1,9 +1,10 @@
1
1
  import { DynamicImportLanguageRegistration } from "shiki";
2
-
3
2
  //#region src/highlighter/languages/registerCustomLanguage.d.ts
4
3
  /**
5
4
  * Register a custom language loader and optionally map it to
6
- * file names or extensions.
5
+ * file names or extensions. The registered name must match a returned
6
+ * grammar's name or aliases; registering a loader does not automatically add a
7
+ * grammar alias.
7
8
  */
8
9
  declare function registerCustomLanguage(lang: string, loader: DynamicImportLanguageRegistration,
9
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"registerCustomLanguage.d.ts","names":[],"sources":["../../../src/highlighter/languages/registerCustomLanguage.ts"],"mappings":";;;;;AASA;;iBAAgB,sBAAA,CACd,IAAA,UACA,MAAA,EAAQ,iCAAiC;;;;;;;AAOzC,qBAAA"}
1
+ {"version":3,"file":"registerCustomLanguage.d.ts","names":[],"sources":["../../../src/highlighter/languages/registerCustomLanguage.ts"],"mappings":";;;;;;;;iBAWgB,uBACd,cACA,QAAQ,mCAOR;;;;;;;AAAA"}
@@ -3,7 +3,9 @@ import { setCustomExtension } from "../../utils/getFiletypeFromFileName.js";
3
3
  //#region src/highlighter/languages/registerCustomLanguage.ts
4
4
  /**
5
5
  * Register a custom language loader and optionally map it to
6
- * file names or extensions.
6
+ * file names or extensions. The registered name must match a returned
7
+ * grammar's name or aliases; registering a loader does not automatically add a
8
+ * grammar alias.
7
9
  */
8
10
  function registerCustomLanguage(lang, loader, extensionsOrFilenames = []) {
9
11
  if (lang === "text" || lang === "ansi") throw new Error("registerCustomLanguage: 'text' and 'ansi' are reserved language names");
@@ -1 +1 @@
1
- {"version":3,"file":"registerCustomLanguage.js","names":[],"sources":["../../../src/highlighter/languages/registerCustomLanguage.ts"],"sourcesContent":["import type { DynamicImportLanguageRegistration } from 'shiki';\n\nimport { setCustomExtension } from '../../utils/getFiletypeFromFileName';\nimport { RegisteredCustomLanguages } from './constants';\n\n/**\n * Register a custom language loader and optionally map it to\n * file names or extensions.\n */\nexport function registerCustomLanguage(\n lang: string,\n loader: DynamicImportLanguageRegistration,\n /**\n * File names or extensions to map to this language. Use exact filenames\n * (e.g., \"Dockerfile\", \"CMakeLists.txt\") or extension tokens without a dot\n * (e.g., \"proto\", \"foo\"). Compound extensions are supported\n * (e.g., \"blade.php\").\n */\n extensionsOrFilenames: string[] = []\n): void {\n if (lang === 'text' || lang === 'ansi') {\n throw new Error(\n \"registerCustomLanguage: 'text' and 'ansi' are reserved language names\"\n );\n }\n if (RegisteredCustomLanguages.has(lang)) {\n console.error(\n `registerCustomLanguage: lang: ${lang} is already registered`\n );\n return;\n }\n RegisteredCustomLanguages.set(lang, loader);\n for (const extension of extensionsOrFilenames) {\n setCustomExtension(extension, lang);\n }\n}\n"],"mappings":";;;;;;;AASA,SAAgB,uBACd,MACA,QAOA,wBAAkC,CAAC,GAC7B;CACN,IAAI,SAAS,UAAU,SAAS,QAC9B,MAAM,IAAI,MACR,uEACF;CAEF,IAAI,0BAA0B,IAAI,IAAI,GAAG;EACvC,QAAQ,MACN,iCAAiC,KAAK,uBACxC;EACA;CACF;CACA,0BAA0B,IAAI,MAAM,MAAM;CAC1C,KAAK,MAAM,aAAa,uBACtB,mBAAmB,WAAW,IAAI;AAEtC"}
1
+ {"version":3,"file":"registerCustomLanguage.js","names":[],"sources":["../../../src/highlighter/languages/registerCustomLanguage.ts"],"sourcesContent":["import type { DynamicImportLanguageRegistration } from 'shiki';\n\nimport { setCustomExtension } from '../../utils/getFiletypeFromFileName';\nimport { RegisteredCustomLanguages } from './constants';\n\n/**\n * Register a custom language loader and optionally map it to\n * file names or extensions. The registered name must match a returned\n * grammar's name or aliases; registering a loader does not automatically add a\n * grammar alias.\n */\nexport function registerCustomLanguage(\n lang: string,\n loader: DynamicImportLanguageRegistration,\n /**\n * File names or extensions to map to this language. Use exact filenames\n * (e.g., \"Dockerfile\", \"CMakeLists.txt\") or extension tokens without a dot\n * (e.g., \"proto\", \"foo\"). Compound extensions are supported\n * (e.g., \"blade.php\").\n */\n extensionsOrFilenames: string[] = []\n): void {\n if (lang === 'text' || lang === 'ansi') {\n throw new Error(\n \"registerCustomLanguage: 'text' and 'ansi' are reserved language names\"\n );\n }\n if (RegisteredCustomLanguages.has(lang)) {\n console.error(\n `registerCustomLanguage: lang: ${lang} is already registered`\n );\n return;\n }\n RegisteredCustomLanguages.set(lang, loader);\n for (const extension of extensionsOrFilenames) {\n setCustomExtension(extension, lang);\n }\n}\n"],"mappings":";;;;;;;;;AAWA,SAAgB,uBACd,MACA,QAOA,wBAAkC,CAAC,GAC7B;CACN,IAAI,SAAS,UAAU,SAAS,QAC9B,MAAM,IAAI,MACR,uEACF;CAEF,IAAI,0BAA0B,IAAI,IAAI,GAAG;EACvC,QAAQ,MACN,iCAAiC,KAAK,uBACxC;EACA;CACF;CACA,0BAA0B,IAAI,MAAM,MAAM;CAC1C,KAAK,MAAM,aAAa,uBACtB,mBAAmB,WAAW,IAAI;AAEtC"}
@@ -1,5 +1,6 @@
1
1
  import { SupportedLanguages } from "../../types.js";
2
2
  import { ResolvedLanguage } from "../../worker/types.js";
3
+ import "../../worker/index.js";
3
4
  //#region src/highlighter/languages/resolveLanguage.d.ts
4
5
  declare function resolveLanguage(lang: Exclude<SupportedLanguages, 'text' | 'ansi'>): Promise<ResolvedLanguage>;
5
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"resolveLanguage.d.ts","names":[],"sources":["../../../src/highlighter/languages/resolveLanguage.ts"],"mappings":";;;iBAWsB,eAAA,CACpB,IAAA,EAAM,OAAA,CAAQ,kBAAA,qBACb,OAAA,CAAQ,gBAAA"}
1
+ {"version":3,"file":"resolveLanguage.d.ts","names":[],"sources":["../../../src/highlighter/languages/resolveLanguage.ts"],"mappings":";;;;iBAWsB,gBACpB,MAAM,QAAQ,uCACb,QAAQ"}
@@ -1,5 +1,6 @@
1
1
  import { SupportedLanguages } from "../../types.js";
2
2
  import { ResolvedLanguage } from "../../worker/types.js";
3
+ import "../../worker/index.js";
3
4
  //#region src/highlighter/languages/resolveLanguages.d.ts
4
5
  declare function resolveLanguages(languages: SupportedLanguages[]): Promise<ResolvedLanguage[]>;
5
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"resolveLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/resolveLanguages.ts"],"mappings":";;;iBAKsB,gBAAA,CACpB,SAAA,EAAW,kBAAA,KACV,OAAA,CAAQ,gBAAA"}
1
+ {"version":3,"file":"resolveLanguages.d.ts","names":[],"sources":["../../../src/highlighter/languages/resolveLanguages.ts"],"mappings":";;;;iBAKsB,iBACpB,WAAW,uBACV,QAAQ"}