@pierre/diffs 1.5.2 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/components/CodeView.d.ts +3 -2
- package/dist/components/CodeView.d.ts.map +1 -1
- package/dist/components/CodeView.js +24 -19
- package/dist/components/CodeView.js.map +1 -1
- package/dist/components/File.d.ts +31 -9
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +176 -90
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +32 -9
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +225 -131
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/FileStream.d.ts +6 -4
- package/dist/components/FileStream.d.ts.map +1 -1
- package/dist/components/FileStream.js +49 -36
- package/dist/components/FileStream.js.map +1 -1
- package/dist/components/UnresolvedFile.d.ts +14 -4
- package/dist/components/UnresolvedFile.d.ts.map +1 -1
- package/dist/components/UnresolvedFile.js +35 -16
- package/dist/components/UnresolvedFile.js.map +1 -1
- package/dist/components/VirtualizedFile.d.ts +3 -2
- package/dist/components/VirtualizedFile.d.ts.map +1 -1
- package/dist/components/VirtualizedFile.js +28 -20
- package/dist/components/VirtualizedFile.js.map +1 -1
- package/dist/components/VirtualizedFileDiff.d.ts +3 -2
- package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
- package/dist/components/VirtualizedFileDiff.js +31 -24
- package/dist/components/VirtualizedFileDiff.js.map +1 -1
- package/dist/constants.d.ts +4 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/editor/editor.d.ts +2 -1
- package/dist/editor/editor.d.ts.map +1 -1
- package/dist/editor/editor.js +5 -1
- package/dist/editor/editor.js.map +1 -1
- package/dist/editor/platform.d.ts +1 -1
- package/dist/editor/platform.js +5 -4
- package/dist/editor/platform.js.map +1 -1
- package/dist/editor/selection.d.ts +2 -2
- package/dist/editor/selection.d.ts.map +1 -1
- package/dist/editor/selection.js +31 -6
- package/dist/editor/selection.js.map +1 -1
- package/dist/editor/tokenizer.d.ts +6 -4
- package/dist/editor/tokenizer.d.ts.map +1 -1
- package/dist/editor/tokenizer.js +25 -470
- package/dist/editor/tokenizer.js.map +1 -1
- package/dist/highlighter/DiffsEditorTokenizer.d.ts +16 -0
- package/dist/highlighter/DiffsEditorTokenizer.d.ts.map +1 -0
- package/dist/highlighter/DiffsEditorTokenizer.js +0 -0
- package/dist/highlighter/DiffsHighlighter.d.ts +41 -0
- package/dist/highlighter/DiffsHighlighter.d.ts.map +1 -0
- package/dist/highlighter/DiffsHighlighter.js +39 -0
- package/dist/highlighter/DiffsHighlighter.js.map +1 -0
- package/dist/highlighter/backends/highlights.d.ts +26 -0
- package/dist/highlighter/backends/highlights.d.ts.map +1 -0
- package/dist/highlighter/backends/highlights.js +71 -0
- package/dist/highlighter/backends/highlights.js.map +1 -0
- package/dist/highlighter/backends/shiki.d.ts +27 -0
- package/dist/highlighter/backends/shiki.d.ts.map +1 -0
- package/dist/highlighter/backends/shiki.js +107 -0
- package/dist/highlighter/backends/shiki.js.map +1 -0
- package/dist/highlighter/highlighterType.d.ts +13 -0
- package/dist/highlighter/highlighterType.d.ts.map +1 -0
- package/dist/highlighter/highlighterType.js +32 -0
- package/dist/highlighter/highlighterType.js.map +1 -0
- package/dist/highlighter/highlights-editor.d.ts +24 -0
- package/dist/highlighter/highlights-editor.d.ts.map +1 -0
- package/dist/highlighter/highlights-editor.js +166 -0
- package/dist/highlighter/highlights-editor.js.map +1 -0
- package/dist/highlighter/highlights-stream.d.ts +20 -0
- package/dist/highlighter/highlights-stream.d.ts.map +1 -0
- package/dist/highlighter/highlights-stream.js +93 -0
- package/dist/highlighter/highlights-stream.js.map +1 -0
- package/dist/highlighter/languages/areLanguagesAttached.d.ts +2 -1
- package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
- package/dist/highlighter/languages/areLanguagesAttached.js +4 -6
- package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts +6 -1
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.js +6 -11
- package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
- package/dist/highlighter/languages/constants.d.ts +1 -1
- package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -1
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
- package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
- package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
- package/dist/highlighter/languages/resolveLanguage.js +19 -16
- package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
- package/dist/highlighter/languages/resolveLanguages.d.ts +1 -1
- package/dist/highlighter/shared_highlighter.d.ts +24 -9
- package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
- package/dist/highlighter/shared_highlighter.js +59 -47
- package/dist/highlighter/shared_highlighter.js.map +1 -1
- package/dist/highlighter/shiki-editor.d.ts +25 -0
- package/dist/highlighter/shiki-editor.d.ts.map +1 -0
- package/dist/highlighter/shiki-editor.js +483 -0
- package/dist/highlighter/shiki-editor.js.map +1 -0
- package/dist/highlighter/shiki-stream.d.ts +20 -0
- package/dist/highlighter/shiki-stream.d.ts.map +1 -0
- package/dist/highlighter/shiki-stream.js +60 -0
- package/dist/highlighter/shiki-stream.js.map +1 -0
- package/dist/highlighter/stream-tokenizer.d.ts +40 -0
- package/dist/highlighter/stream-tokenizer.d.ts.map +1 -0
- package/dist/highlighter/stream-tokenizer.js +70 -0
- package/dist/highlighter/stream-tokenizer.js.map +1 -0
- package/dist/highlighter/themes/areThemesAttached.d.ts +3 -2
- package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
- package/dist/highlighter/themes/areThemesAttached.js +5 -4
- package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.d.ts +5 -2
- package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.js +4 -16
- package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +3 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.js +8 -5
- package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/createCSSVariablesTheme.d.ts +7 -0
- package/dist/highlighter/themes/createCSSVariablesTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/createCSSVariablesTheme.js +89 -0
- package/dist/highlighter/themes/createCSSVariablesTheme.js.map +1 -0
- package/dist/highlighter/themes/createCachedLoader.d.ts +5 -0
- package/dist/highlighter/themes/createCachedLoader.d.ts.map +1 -0
- package/dist/highlighter/themes/createCachedLoader.js +15 -0
- package/dist/highlighter/themes/createCachedLoader.js.map +1 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +3 -2
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js +4 -4
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.d.ts +3 -2
- package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.js +4 -3
- package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.d.ts +2 -2
- package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.js +4 -3
- package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +3 -3
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.d.ts +9 -4
- package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.js +8 -16
- package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
- package/dist/highlighter/themes/resolveTheme.d.ts +3 -2
- package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveTheme.js +4 -7
- package/dist/highlighter/themes/resolveTheme.js.map +1 -1
- package/dist/highlighter/themes/resolveThemes.d.ts +3 -2
- package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveThemes.js +4 -7
- package/dist/highlighter/themes/resolveThemes.js.map +1 -1
- package/dist/highlighter/themes/themeResolver.d.ts +10 -4
- package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
- package/dist/highlighter/themes/themeResolver.js +141 -2
- package/dist/highlighter/themes/themeResolver.js.map +1 -1
- package/dist/highlighter/themes/types.d.ts +23 -0
- package/dist/highlighter/themes/types.d.ts.map +1 -0
- package/dist/highlighter/themes/types.js +0 -0
- package/dist/highlighter/tokenizer-types.d.ts +35 -0
- package/dist/highlighter/tokenizer-types.d.ts.map +1 -0
- package/dist/highlighter/tokenizer-types.js +0 -0
- package/dist/highlighter/types.d.ts +55 -0
- package/dist/highlighter/types.d.ts.map +1 -0
- package/dist/highlighter/types.js +0 -0
- package/dist/index.d.ts +22 -13
- package/dist/index.js +21 -18
- package/dist/managers/InteractionManager.d.ts.map +1 -1
- package/dist/managers/InteractionManager.js +2 -2
- package/dist/managers/InteractionManager.js.map +1 -1
- package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +9 -1
- package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
- package/dist/react/CodeView.d.ts +4 -3
- package/dist/react/CodeView.d.ts.map +1 -1
- package/dist/react/CodeView.js +47 -38
- package/dist/react/CodeView.js.map +1 -1
- package/dist/react/File.js +3 -3
- package/dist/react/File.js.map +1 -1
- package/dist/react/FileDiff.js +3 -3
- package/dist/react/FileDiff.js.map +1 -1
- package/dist/react/MultiFileDiff.js +2 -2
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/PatchDiff.js +3 -3
- package/dist/react/PatchDiff.js.map +1 -1
- package/dist/react/UnresolvedFile.js +2 -2
- package/dist/react/UnresolvedFile.js.map +1 -1
- package/dist/react/index.d.ts +9 -4
- package/dist/react/types.d.ts +4 -2
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.js +1 -1
- package/dist/react/utils/renderDiffChildren.js.map +1 -1
- package/dist/react/utils/renderFileChildren.js +1 -1
- package/dist/react/utils/renderFileChildren.js.map +1 -1
- package/dist/react/utils/useFileDiffInstance.d.ts +1 -0
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.js +29 -24
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/react/utils/useFileInstance.d.ts +2 -0
- package/dist/react/utils/useFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileInstance.js +38 -28
- package/dist/react/utils/useFileInstance.js.map +1 -1
- package/dist/react/utils/useForceUpdate.d.ts +5 -0
- package/dist/react/utils/useForceUpdate.d.ts.map +1 -0
- package/dist/react/utils/useForceUpdate.js +27 -0
- package/dist/react/utils/useForceUpdate.js.map +1 -0
- package/dist/react/utils/useNextRenderData.d.ts +9 -0
- package/dist/react/utils/useNextRenderData.d.ts.map +1 -0
- package/dist/react/utils/useNextRenderData.js +9 -0
- package/dist/react/utils/useNextRenderData.js.map +1 -0
- package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -0
- package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useUnresolvedFileInstance.js +26 -11
- package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +4 -2
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +82 -43
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +6 -2
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +77 -43
- package/dist/renderers/FileRenderer.js.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
- package/dist/shiki-stream/index.d.ts +3 -3
- package/dist/shiki-stream/index.js +1 -2
- package/dist/shiki-stream/stream.d.ts +4 -4
- package/dist/shiki-stream/stream.d.ts.map +1 -1
- package/dist/shiki-stream/stream.js +20 -9
- package/dist/shiki-stream/stream.js.map +1 -1
- package/dist/shiki-stream/types.d.ts +7 -38
- package/dist/shiki-stream/types.d.ts.map +1 -1
- package/dist/ssr/index.d.ts +7 -2
- package/dist/ssr/renderHTML.js +2 -2
- package/dist/ssr/renderHTML.js.map +1 -1
- package/dist/style.js +1 -1
- package/dist/style.js.map +1 -1
- package/dist/types.d.ts +20 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/canUseWASM.d.ts +13 -0
- package/dist/utils/canUseWASM.d.ts.map +1 -0
- package/dist/utils/canUseWASM.js +59 -0
- package/dist/utils/canUseWASM.js.map +1 -0
- package/dist/utils/createSpanNodeFromToken.d.ts +3 -2
- package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
- package/dist/utils/createSpanNodeFromToken.js +4 -5
- package/dist/utils/createSpanNodeFromToken.js.map +1 -1
- package/dist/utils/cssWrappers.d.ts.map +1 -1
- package/dist/utils/cssWrappers.js +12 -0
- package/dist/utils/cssWrappers.js.map +1 -1
- package/dist/utils/getCodeViewItemRenderData.d.ts +10 -0
- package/dist/utils/getCodeViewItemRenderData.d.ts.map +1 -0
- package/dist/utils/getCodeViewItemRenderData.js +19 -0
- package/dist/utils/getCodeViewItemRenderData.js.map +1 -0
- package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
- package/dist/utils/getHighlighterOptions.js +3 -2
- package/dist/utils/getHighlighterOptions.js.map +1 -1
- package/dist/utils/getHighlighterThemeStyles.d.ts +2 -1
- package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
- package/dist/utils/getHighlighterThemeStyles.js +13 -3
- package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
- package/dist/utils/getTokenOptions.d.ts +7 -0
- package/dist/utils/getTokenOptions.d.ts.map +1 -0
- package/dist/utils/getTokenOptions.js +16 -0
- package/dist/utils/getTokenOptions.js.map +1 -0
- package/dist/utils/hastToHtml.d.ts +10 -0
- package/dist/utils/hastToHtml.d.ts.map +1 -0
- package/dist/utils/hastToHtml.js +125 -0
- package/dist/utils/hastToHtml.js.map +1 -0
- package/dist/utils/hydratePartialDiff.js +4 -0
- package/dist/utils/hydratePartialDiff.js.map +1 -1
- package/dist/utils/parseDiffDecorations.d.ts +2 -1
- package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.js +2 -0
- package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
- package/dist/utils/parsePatchFiles.d.ts.map +1 -1
- package/dist/utils/parsePatchFiles.js +24 -4
- package/dist/utils/parsePatchFiles.js.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.d.ts +3 -2
- package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.js +33 -48
- package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
- package/dist/utils/renderFileWithHighlighter.d.ts +3 -2
- package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderFileWithHighlighter.js +10 -26
- package/dist/utils/renderFileWithHighlighter.js.map +1 -1
- package/dist/utils/renderTokenLines.d.ts +22 -0
- package/dist/utils/renderTokenLines.d.ts.map +1 -0
- package/dist/utils/renderTokenLines.js +250 -0
- package/dist/utils/renderTokenLines.js.map +1 -0
- package/dist/utils/resolvePreferredHighlighter.d.ts +13 -0
- package/dist/utils/resolvePreferredHighlighter.d.ts.map +1 -0
- package/dist/utils/resolvePreferredHighlighter.js +11 -0
- package/dist/utils/resolvePreferredHighlighter.js.map +1 -0
- package/dist/utils/resolveRegion.js +20 -10
- package/dist/utils/resolveRegion.js.map +1 -1
- package/dist/utils/setDeferredArrayItem.d.ts +5 -0
- package/dist/utils/setDeferredArrayItem.d.ts.map +1 -0
- package/dist/utils/setDeferredArrayItem.js +39 -0
- package/dist/utils/setDeferredArrayItem.js.map +1 -0
- package/dist/utils/tokenStyle.d.ts +11 -0
- package/dist/utils/tokenStyle.d.ts.map +1 -0
- package/dist/utils/tokenStyle.js +32 -0
- package/dist/utils/tokenStyle.js.map +1 -0
- package/dist/utils/tokensToHtml.d.ts +11 -0
- package/dist/utils/tokensToHtml.d.ts.map +1 -0
- package/dist/utils/tokensToHtml.js +48 -0
- package/dist/utils/tokensToHtml.js.map +1 -0
- package/dist/utils/updateDiffHunks.d.ts +2 -2
- package/dist/utils/updateDiffHunks.d.ts.map +1 -1
- package/dist/utils/updateDiffHunks.js +7 -3
- package/dist/utils/updateDiffHunks.js.map +1 -1
- package/dist/utils/wrapTokenFragments.js.map +1 -1
- package/dist/worker/WorkerPoolManager.d.ts +14 -2
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +155 -67
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/hastLinesTransport.d.ts +14 -0
- package/dist/worker/hastLinesTransport.d.ts.map +1 -0
- package/dist/worker/hastLinesTransport.js +156 -0
- package/dist/worker/hastLinesTransport.js.map +1 -0
- package/dist/worker/highlights-CpZm9DAR.js +317 -0
- package/dist/worker/highlights-CpZm9DAR.js.map +1 -0
- package/dist/worker/index.d.ts +1 -1
- package/dist/worker/shiki-Ci4cdHsM.js +697 -0
- package/dist/worker/shiki-Ci4cdHsM.js.map +1 -0
- package/dist/worker/stream-tokenizer-DK9xp5M5.js +427 -0
- package/dist/worker/stream-tokenizer-DK9xp5M5.js.map +1 -0
- package/dist/worker/types.d.ts +16 -3
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/worker-portable.js +41 -13337
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +681 -349
- package/dist/worker/worker.js.map +1 -1
- package/dist/worker/workerMessage.d.ts +24 -0
- package/dist/worker/workerMessage.d.ts.map +1 -0
- package/dist/worker/workerMessage.js +0 -0
- package/package.json +5 -3
- package/dist/highlighter/themes/constants.d.ts +0 -5
- package/dist/highlighter/themes/constants.d.ts.map +0 -1
- package/dist/highlighter/themes/constants.js +0 -6
- package/dist/highlighter/themes/constants.js.map +0 -1
- package/dist/highlighter/themes/themeResolution.d.ts +0 -7
- package/dist/highlighter/themes/themeResolution.d.ts.map +0 -1
- package/dist/highlighter/themes/themeResolution.js +0 -21
- package/dist/highlighter/themes/themeResolution.js.map +0 -1
- package/dist/shiki-stream/tokenizer.d.ts +0 -23
- package/dist/shiki-stream/tokenizer.d.ts.map +0 -1
- package/dist/shiki-stream/tokenizer.js +0 -72
- package/dist/shiki-stream/tokenizer.js.map +0 -1
- package/dist/utils/createTransformerWithState.d.ts +0 -12
- package/dist/utils/createTransformerWithState.d.ts.map +0 -1
- package/dist/utils/createTransformerWithState.js +0 -89
- package/dist/utils/createTransformerWithState.js.map +0 -1
- package/dist/worker/wasm-B9ZqxnKj.js +0 -8
- package/dist/worker/wasm-B9ZqxnKj.js.map +0 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/react/utils/useNextRenderData.ts
|
|
2
|
+
function useNextRenderData(instanceRef, input) {
|
|
3
|
+
"use no memo";
|
|
4
|
+
return instanceRef.current?.__getNextRenderData(input);
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
export { useNextRenderData };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=useNextRenderData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNextRenderData.js","names":[],"sources":["../../../src/react/utils/useNextRenderData.ts"],"sourcesContent":["import type { RefObject } from 'react';\n\ninterface NextRenderDataSource<TInput, TData> {\n __getNextRenderData(input: TInput): TData;\n}\n\n// Read the data the instance will display once render() receives this input.\n// The instance can change it without new props, so this must not be memoized.\n// Returns undefined before the instance exists.\nexport function useNextRenderData<TInput, TData>(\n instanceRef: RefObject<NextRenderDataSource<TInput, TData> | null>,\n input: TInput\n): TData | undefined {\n 'use no memo';\n // oxlint-disable-next-line react/refs -- the instance changes without new props\n return instanceRef.current?.__getNextRenderData(input);\n}\n"],"mappings":";AASA,SAAgB,kBACd,aACA,OACmB;CACnB;CAEA,OAAO,YAAY,SAAS,oBAAoB,KAAK;AACvD"}
|
|
@@ -16,6 +16,7 @@ interface UseUnresolvedFileInstanceProps<LAnnotation> {
|
|
|
16
16
|
disableWorkerPool: boolean;
|
|
17
17
|
}
|
|
18
18
|
interface UseUnresolvedFileInstanceReturn<LAnnotation> {
|
|
19
|
+
lineAnnotations: DiffLineAnnotation<LAnnotation>[];
|
|
19
20
|
fileDiff: FileDiffMetadata;
|
|
20
21
|
actions: (MergeConflictDiffAction | undefined)[];
|
|
21
22
|
markerRows: MergeConflictMarkerRow[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUnresolvedFileInstance.d.ts","names":[],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"useUnresolvedFileInstance.d.ts","names":[],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"mappings":";;;;;;UAuCU,+BAA+B;EACvC,MAAM;EACN,UAAU,2BAA2B;EACrC,iBAAiB,mBAAmB;EACpC,eAAe;EACf;EACA;EACA;EACA;EACA;;UAGQ,gCAAgC;EACxC,iBAAiB,mBAAmB;EACpC,UAAU;EACV,UAAU;EACV,YAAY;EACZ,IAAI,MAAM;EACV,kBAAkB;EAClB,eAAe,eAAe;;iBAGhB,0BAA0B,eACxC,MACA,SACA,iBACA,eACA,iBACA,oBACA,wBACA,iBACA,qBACC,+BAA+B,eAAe,gCAAgC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { EMPTY_LINE_ANNOTATIONS } from "../../constants.js";
|
|
1
2
|
import { areOptionsEqual } from "../../utils/areOptionsEqual.js";
|
|
2
3
|
import { parseMergeConflictDiffFromFile } from "../../utils/parseMergeConflictDiffFromFile.js";
|
|
3
4
|
import { UnresolvedFile } from "../../components/UnresolvedFile.js";
|
|
4
5
|
import { useStableCallback } from "./useStableCallback.js";
|
|
5
6
|
import { noopRender } from "../constants.js";
|
|
6
7
|
import { WorkerPoolContext } from "../WorkerPoolContext.js";
|
|
8
|
+
import { useForceUpdate } from "./useForceUpdate.js";
|
|
9
|
+
import { useNextRenderData } from "./useNextRenderData.js";
|
|
7
10
|
import { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
8
11
|
//#region src/react/utils/useUnresolvedFileInstance.ts
|
|
9
12
|
const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
@@ -30,6 +33,18 @@ function useUnresolvedFileInstance({ file, options, lineAnnotations, selectedLin
|
|
|
30
33
|
const controlledSelection = selectedLines !== void 0;
|
|
31
34
|
const poolManager = useContext(WorkerPoolContext);
|
|
32
35
|
const instanceRef = useRef(null);
|
|
36
|
+
const forceUpdate = useForceUpdate();
|
|
37
|
+
const renderData = useNextRenderData(instanceRef, {
|
|
38
|
+
fileDiff,
|
|
39
|
+
actions,
|
|
40
|
+
markerRows,
|
|
41
|
+
lineAnnotations
|
|
42
|
+
}) ?? {
|
|
43
|
+
fileDiff,
|
|
44
|
+
actions,
|
|
45
|
+
markerRows,
|
|
46
|
+
lineAnnotations: lineAnnotations ?? EMPTY_LINE_ANNOTATIONS
|
|
47
|
+
};
|
|
33
48
|
const ref = useStableCallback((fileContainer) => {
|
|
34
49
|
if (fileContainer != null) {
|
|
35
50
|
if (instanceRef.current != null) throw new Error("useUnresolvedFileInstance: An instance should not already exist when a node is created");
|
|
@@ -40,7 +55,7 @@ function useUnresolvedFileInstance({ file, options, lineAnnotations, selectedLin
|
|
|
40
55
|
hasGutterRenderUtility,
|
|
41
56
|
onMergeConflictAction,
|
|
42
57
|
options
|
|
43
|
-
}), !disableWorkerPool ? poolManager : void 0,
|
|
58
|
+
}), !disableWorkerPool ? poolManager : void 0, forceUpdate);
|
|
44
59
|
instanceRef.current.hydrate({
|
|
45
60
|
fileDiff,
|
|
46
61
|
actions,
|
|
@@ -66,7 +81,7 @@ function useUnresolvedFileInstance({ file, options, lineAnnotations, selectedLin
|
|
|
66
81
|
onMergeConflictAction,
|
|
67
82
|
options
|
|
68
83
|
});
|
|
69
|
-
const forceRender =
|
|
84
|
+
const forceRender = !areOptionsEqual(instance.options, newOptions);
|
|
70
85
|
instance.setOptions(newOptions);
|
|
71
86
|
instance.render({
|
|
72
87
|
fileDiff,
|
|
@@ -77,17 +92,17 @@ function useUnresolvedFileInstance({ file, options, lineAnnotations, selectedLin
|
|
|
77
92
|
});
|
|
78
93
|
if (selectedLines !== void 0) instance.setSelectedLines(selectedLines);
|
|
79
94
|
});
|
|
95
|
+
const getHoveredLine = useCallback(() => {
|
|
96
|
+
return instanceRef.current?.getHoveredLine();
|
|
97
|
+
}, []);
|
|
98
|
+
const getInstance = useCallback(() => {
|
|
99
|
+
return instanceRef.current ?? void 0;
|
|
100
|
+
}, []);
|
|
80
101
|
return {
|
|
102
|
+
...renderData,
|
|
81
103
|
ref,
|
|
82
|
-
getHoveredLine
|
|
83
|
-
|
|
84
|
-
}, []),
|
|
85
|
-
fileDiff,
|
|
86
|
-
actions,
|
|
87
|
-
markerRows,
|
|
88
|
-
getInstance: useCallback(() => {
|
|
89
|
-
return instanceRef.current ?? void 0;
|
|
90
|
-
}, [])
|
|
104
|
+
getHoveredLine,
|
|
105
|
+
getInstance
|
|
91
106
|
};
|
|
92
107
|
}
|
|
93
108
|
function mergeUnresolvedOptions({ options, controlledSelection, onMergeConflictAction, hasConflictUtility, hasCustomHeader, hasGutterRenderUtility }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUnresolvedFileInstance.js","names":["UnresolvedFileClass"],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"sourcesContent":["import {\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport {\n UnresolvedFile,\n UnresolvedFile as UnresolvedFileClass,\n type UnresolvedFileOptions,\n} from '../../components/UnresolvedFile';\nimport type { GetHoveredLineResult } from '../../managers/InteractionManager';\nimport type {\n DiffLineAnnotation,\n FileContents,\n FileDiffMetadata,\n MergeConflictActionPayload,\n MergeConflictMarkerRow,\n SelectedLineRange,\n} from '../../types';\nimport { areOptionsEqual } from '../../utils/areOptionsEqual';\nimport {\n type MergeConflictDiffAction,\n parseMergeConflictDiffFromFile,\n} from '../../utils/parseMergeConflictDiffFromFile';\nimport { noopRender } from '../constants';\nimport type { UnresolvedFileReactOptions } from '../UnresolvedFile';\nimport { WorkerPoolContext } from '../WorkerPoolContext';\nimport { useStableCallback } from './useStableCallback';\n\nconst useIsomorphicLayoutEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface UseUnresolvedFileInstanceProps<LAnnotation> {\n file: FileContents;\n options?: UnresolvedFileReactOptions<LAnnotation>;\n lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;\n selectedLines: SelectedLineRange | null | undefined;\n prerenderedHTML: string | undefined;\n hasConflictUtility: boolean;\n hasGutterRenderUtility: boolean;\n hasCustomHeader: boolean;\n disableWorkerPool: boolean;\n}\n\ninterface UseUnresolvedFileInstanceReturn<LAnnotation> {\n fileDiff: FileDiffMetadata;\n actions: (MergeConflictDiffAction | undefined)[];\n markerRows: MergeConflictMarkerRow[];\n ref(node: HTMLElement | null): void;\n getHoveredLine(): GetHoveredLineResult<'diff'> | undefined;\n getInstance(): UnresolvedFile<LAnnotation> | undefined;\n}\n\nexport function useUnresolvedFileInstance<LAnnotation>({\n file,\n options,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasConflictUtility,\n hasGutterRenderUtility,\n hasCustomHeader,\n disableWorkerPool,\n}: UseUnresolvedFileInstanceProps<LAnnotation>): UseUnresolvedFileInstanceReturn<LAnnotation> {\n const [{ fileDiff, actions, markerRows }, setState] = useState(() => {\n const { fileDiff, actions, markerRows } = parseMergeConflictDiffFromFile(\n file,\n options?.maxContextLines\n );\n return { fileDiff, actions, markerRows };\n });\n // UnresolvedFile is intentionally uncontrolled in React. Keep an internal\n // source-of-truth file so sequential conflict actions apply to the latest\n // resolved contents rather than the initial prop value.\n const onMergeConflictAction = useStableCallback(\n (\n payload: MergeConflictActionPayload,\n instance: UnresolvedFile<LAnnotation>\n ) => {\n setState((prevState) => {\n const { fileDiff, actions, markerRows } =\n instance.resolveConflict(\n payload.conflict.conflictIndex,\n payload.resolution,\n prevState.fileDiff\n ) ?? {};\n if (fileDiff == null || actions == null || markerRows == null) {\n return prevState;\n } else {\n return { fileDiff, actions, markerRows };\n }\n });\n }\n );\n const controlledSelection = selectedLines !== undefined;\n const poolManager = useContext(WorkerPoolContext);\n const instanceRef = useRef<UnresolvedFileClass<LAnnotation> | null>(null);\n const ref = useStableCallback((fileContainer: HTMLElement | null) => {\n if (fileContainer != null) {\n if (instanceRef.current != null) {\n throw new Error(\n 'useUnresolvedFileInstance: An instance should not already exist when a node is created'\n );\n }\n instanceRef.current = new UnresolvedFileClass(\n mergeUnresolvedOptions({\n controlledSelection,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n onMergeConflictAction,\n options,\n }),\n !disableWorkerPool ? poolManager : undefined,\n
|
|
1
|
+
{"version":3,"file":"useUnresolvedFileInstance.js","names":["UnresolvedFileClass"],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"sourcesContent":["import {\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport {\n UnresolvedFile,\n UnresolvedFile as UnresolvedFileClass,\n type UnresolvedFileOptions,\n} from '../../components/UnresolvedFile';\nimport { EMPTY_LINE_ANNOTATIONS } from '../../constants';\nimport type { GetHoveredLineResult } from '../../managers/InteractionManager';\nimport type {\n DiffLineAnnotation,\n FileContents,\n FileDiffMetadata,\n MergeConflictActionPayload,\n MergeConflictMarkerRow,\n SelectedLineRange,\n} from '../../types';\nimport { areOptionsEqual } from '../../utils/areOptionsEqual';\nimport {\n type MergeConflictDiffAction,\n parseMergeConflictDiffFromFile,\n} from '../../utils/parseMergeConflictDiffFromFile';\nimport { noopRender } from '../constants';\nimport type { UnresolvedFileReactOptions } from '../UnresolvedFile';\nimport { WorkerPoolContext } from '../WorkerPoolContext';\nimport { useForceUpdate } from './useForceUpdate';\nimport { useNextRenderData } from './useNextRenderData';\nimport { useStableCallback } from './useStableCallback';\n\nconst useIsomorphicLayoutEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface UseUnresolvedFileInstanceProps<LAnnotation> {\n file: FileContents;\n options?: UnresolvedFileReactOptions<LAnnotation>;\n lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;\n selectedLines: SelectedLineRange | null | undefined;\n prerenderedHTML: string | undefined;\n hasConflictUtility: boolean;\n hasGutterRenderUtility: boolean;\n hasCustomHeader: boolean;\n disableWorkerPool: boolean;\n}\n\ninterface UseUnresolvedFileInstanceReturn<LAnnotation> {\n lineAnnotations: DiffLineAnnotation<LAnnotation>[];\n fileDiff: FileDiffMetadata;\n actions: (MergeConflictDiffAction | undefined)[];\n markerRows: MergeConflictMarkerRow[];\n ref(node: HTMLElement | null): void;\n getHoveredLine(): GetHoveredLineResult<'diff'> | undefined;\n getInstance(): UnresolvedFile<LAnnotation> | undefined;\n}\n\nexport function useUnresolvedFileInstance<LAnnotation>({\n file,\n options,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasConflictUtility,\n hasGutterRenderUtility,\n hasCustomHeader,\n disableWorkerPool,\n}: UseUnresolvedFileInstanceProps<LAnnotation>): UseUnresolvedFileInstanceReturn<LAnnotation> {\n const [{ fileDiff, actions, markerRows }, setState] = useState(() => {\n const { fileDiff, actions, markerRows } = parseMergeConflictDiffFromFile(\n file,\n options?.maxContextLines\n );\n return { fileDiff, actions, markerRows };\n });\n // UnresolvedFile is intentionally uncontrolled in React. Keep an internal\n // source-of-truth file so sequential conflict actions apply to the latest\n // resolved contents rather than the initial prop value.\n const onMergeConflictAction = useStableCallback(\n (\n payload: MergeConflictActionPayload,\n instance: UnresolvedFile<LAnnotation>\n ) => {\n setState((prevState) => {\n const { fileDiff, actions, markerRows } =\n instance.resolveConflict(\n payload.conflict.conflictIndex,\n payload.resolution,\n prevState.fileDiff\n ) ?? {};\n if (fileDiff == null || actions == null || markerRows == null) {\n return prevState;\n } else {\n return { fileDiff, actions, markerRows };\n }\n });\n }\n );\n const controlledSelection = selectedLines !== undefined;\n const poolManager = useContext(WorkerPoolContext);\n const instanceRef = useRef<UnresolvedFileClass<LAnnotation> | null>(null);\n const forceUpdate = useForceUpdate();\n const renderData = useNextRenderData(instanceRef, {\n fileDiff,\n actions,\n markerRows,\n lineAnnotations,\n }) ?? {\n fileDiff,\n actions,\n markerRows,\n lineAnnotations: lineAnnotations ?? EMPTY_LINE_ANNOTATIONS,\n };\n const ref = useStableCallback((fileContainer: HTMLElement | null) => {\n if (fileContainer != null) {\n if (instanceRef.current != null) {\n throw new Error(\n 'useUnresolvedFileInstance: An instance should not already exist when a node is created'\n );\n }\n instanceRef.current = new UnresolvedFileClass(\n mergeUnresolvedOptions({\n controlledSelection,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n onMergeConflictAction,\n options,\n }),\n !disableWorkerPool ? poolManager : undefined,\n forceUpdate\n );\n void instanceRef.current.hydrate({\n fileDiff,\n actions,\n markerRows,\n fileContainer,\n lineAnnotations,\n prerenderedHTML,\n });\n } else {\n if (instanceRef.current == null) {\n throw new Error(\n 'useUnresolvedFileInstance: A UnresolvedFile instance should exist when unmounting'\n );\n }\n instanceRef.current.cleanUp();\n instanceRef.current = null;\n }\n });\n\n useIsomorphicLayoutEffect(() => {\n if (instanceRef.current == null) return;\n const instance = instanceRef.current;\n const newOptions = mergeUnresolvedOptions({\n controlledSelection,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n onMergeConflictAction,\n options,\n });\n const forceRender = !areOptionsEqual(instance.options, newOptions);\n instance.setOptions(newOptions);\n void instance.render({\n fileDiff,\n actions,\n markerRows,\n lineAnnotations,\n forceRender,\n });\n if (selectedLines !== undefined) {\n instance.setSelectedLines(selectedLines);\n }\n });\n\n const getHoveredLine = useCallback(():\n | GetHoveredLineResult<'diff'>\n | undefined => {\n return instanceRef.current?.getHoveredLine();\n }, []);\n\n const getInstance = useCallback(() => {\n return instanceRef.current ?? undefined;\n }, []);\n\n return { ...renderData, ref, getHoveredLine, getInstance };\n}\n\ninterface MergeUnresolvedOptionsProps<LAnnotation> {\n options: UnresolvedFileReactOptions<LAnnotation> | undefined;\n controlledSelection: boolean;\n onMergeConflictAction: UnresolvedFileOptions<LAnnotation>['onMergeConflictAction'];\n hasConflictUtility: boolean;\n hasGutterRenderUtility: boolean;\n hasCustomHeader: boolean;\n}\n\nfunction mergeUnresolvedOptions<LAnnotation>({\n options,\n controlledSelection,\n onMergeConflictAction,\n hasConflictUtility,\n hasCustomHeader,\n hasGutterRenderUtility,\n}: MergeUnresolvedOptionsProps<LAnnotation>): UnresolvedFileOptions<LAnnotation> {\n return {\n ...options,\n controlledSelection,\n onMergeConflictAction,\n hunkSeparators:\n options?.hunkSeparators === 'custom'\n ? noopRender\n : options?.hunkSeparators,\n // Add a placeholder type for the custom render\n mergeConflictActionsType:\n hasConflictUtility || options?.mergeConflictActionsType === 'custom'\n ? noopRender\n : options?.mergeConflictActionsType,\n renderCustomHeader: hasCustomHeader ? noopRender : undefined,\n renderGutterUtility: hasGutterRenderUtility ? noopRender : undefined,\n };\n}\n"],"mappings":";;;;;;;;;;;AAoCA,MAAM,4BACJ,OAAO,WAAW,cAAc,YAAY;AAwB9C,SAAgB,0BAAuC,EACrD,MACA,SACA,iBACA,eACA,iBACA,oBACA,wBACA,iBACA,qBAC4F;CAC5F,MAAM,CAAC,EAAE,UAAU,SAAS,cAAc,YAAY,eAAe;EACnE,MAAM,EAAE,UAAU,SAAS,eAAe,+BACxC,MACA,SAAS,eACX;EACA,OAAO;GAAE;GAAU;GAAS;EAAW;CACzC,CAAC;CAID,MAAM,wBAAwB,mBAE1B,SACA,aACG;EACH,UAAU,cAAc;GACtB,MAAM,EAAE,UAAU,SAAS,eACzB,SAAS,gBACP,QAAQ,SAAS,eACjB,QAAQ,YACR,UAAU,QACZ,KAAK,CAAC;GACR,IAAI,YAAY,QAAQ,WAAW,QAAQ,cAAc,MACvD,OAAO;QAEP,OAAO;IAAE;IAAU;IAAS;GAAW;EAE3C,CAAC;CACH,CACF;CACA,MAAM,sBAAsB,kBAAkB,KAAA;CAC9C,MAAM,cAAc,WAAW,iBAAiB;CAChD,MAAM,cAAc,OAAgD,IAAI;CACxE,MAAM,cAAc,eAAe;CACnC,MAAM,aAAa,kBAAkB,aAAa;EAChD;EACA;EACA;EACA;CACF,CAAC,KAAK;EACJ;EACA;EACA;EACA,iBAAiB,mBAAmB;CACtC;CACA,MAAM,MAAM,mBAAmB,kBAAsC;EACnE,IAAI,iBAAiB,MAAM;GACzB,IAAI,YAAY,WAAW,MACzB,MAAM,IAAI,MACR,wFACF;GAEF,YAAY,UAAU,IAAIA,eACxB,uBAAuB;IACrB;IACA;IACA;IACA;IACA;IACA;GACF,CAAC,GACD,CAAC,oBAAoB,cAAc,KAAA,GACnC,WACF;GACA,YAAiB,QAAQ,QAAQ;IAC/B;IACA;IACA;IACA;IACA;IACA;GACF,CAAC;EACH,OAAO;GACL,IAAI,YAAY,WAAW,MACzB,MAAM,IAAI,MACR,mFACF;GAEF,YAAY,QAAQ,QAAQ;GAC5B,YAAY,UAAU;EACxB;CACF,CAAC;CAED,gCAAgC;EAC9B,IAAI,YAAY,WAAW,MAAM;EACjC,MAAM,WAAW,YAAY;EAC7B,MAAM,aAAa,uBAAuB;GACxC;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;EACD,MAAM,cAAc,CAAC,gBAAgB,SAAS,SAAS,UAAU;EACjE,SAAS,WAAW,UAAU;EAC9B,SAAc,OAAO;GACnB;GACA;GACA;GACA;GACA;EACF,CAAC;EACD,IAAI,kBAAkB,KAAA,GACpB,SAAS,iBAAiB,aAAa;CAE3C,CAAC;CAED,MAAM,iBAAiB,kBAEN;EACf,OAAO,YAAY,SAAS,eAAe;CAC7C,GAAG,CAAC,CAAC;CAEL,MAAM,cAAc,kBAAkB;EACpC,OAAO,YAAY,WAAW,KAAA;CAChC,GAAG,CAAC,CAAC;CAEL,OAAO;EAAE,GAAG;EAAY;EAAK;EAAgB;CAAY;AAC3D;AAWA,SAAS,uBAAoC,EAC3C,SACA,qBACA,uBACA,oBACA,iBACA,0BAC+E;CAC/E,OAAO;EACL,GAAG;EACH;EACA;EACA,gBACE,SAAS,mBAAmB,WACxB,aACA,SAAS;EAEf,0BACE,sBAAsB,SAAS,6BAA6B,WACxD,aACA,SAAS;EACf,oBAAoB,kBAAkB,aAAa,KAAA;EACnD,qBAAqB,yBAAyB,aAAa,KAAA;CAC7D;AACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Element, ElementContent, Properties } from "../node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.js";
|
|
2
|
-
import {
|
|
2
|
+
import { DiffsHighlighter } from "../highlighter/DiffsHighlighter.js";
|
|
3
|
+
import { BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, CustomPreProperties, DiffLineAnnotation, ExpansionDirections, FileDiffMetadata, FileHeaderRenderMode, HighlightedToken, HunkData, HunkExpansionRegion, LineTypes, RenderDiffOptions, RenderRange, ThemedDiffResult } from "../types.js";
|
|
3
4
|
import { TextDocument } from "../editor/textDocument.js";
|
|
4
5
|
import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
|
|
5
6
|
import "../worker/index.js";
|
|
@@ -77,7 +78,6 @@ declare class DiffHunksRenderer<LAnnotation = undefined> {
|
|
|
77
78
|
private onRenderUpdate?;
|
|
78
79
|
private workerManager?;
|
|
79
80
|
readonly __id: string;
|
|
80
|
-
private highlighter;
|
|
81
81
|
private diff;
|
|
82
82
|
private expandedHunks;
|
|
83
83
|
private deletionAnnotations;
|
|
@@ -147,6 +147,8 @@ declare class DiffHunksRenderer<LAnnotation = undefined> {
|
|
|
147
147
|
protected getOptionsWithDefaults(): DiffHunksRendererOptionsWithDefaults;
|
|
148
148
|
initializeHighlighter(): Promise<DiffsHighlighter>;
|
|
149
149
|
hydrate(diff: FileDiffMetadata | undefined): void;
|
|
150
|
+
private getHighlightWorkerManager;
|
|
151
|
+
private cacheHighlightResult;
|
|
150
152
|
private getLocalHighlightTheme;
|
|
151
153
|
getEffectiveCodeOptions(): Pick<BaseCodeOptions, 'theme' | 'tokenizeMaxLineLength'>;
|
|
152
154
|
private getRenderOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiffHunksRenderer.d.ts","names":[],"sources":["../../src/renderers/DiffHunksRenderer.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"DiffHunksRenderer.d.ts","names":[],"sources":["../../src/renderers/DiffHunksRenderer.ts"],"mappings":";;;;;;;;UAuJiB,iCAAiC;EAChD,mBAAmB;;UAGJ,6CAA6C,KAC5D;EAGA,kBAAkB;;UAGH;EACf;EACA,UAAU;EACV;EACA;;UAGe;EACf;EACA;EACA;;UAGe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,oBAAoB;;UAUL;EACf;EACA;EACA;EACA;EACA;EACA,eAAe;EACf,eAAe;;UAGA;EACf,SAAS;EACT,QAAQ;;UAGO;EACf,UAAU;EACV,UAAU;;UAGK;EACf,SAAS;EACT,QAAQ;;UAGO;EACf,SAAS;EACT,QAAQ;;UAGO;EACf,UAAU;EACV,kBAAkB;EAClB,mBAAmB;EACnB,oBAAoB;EACpB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;EACrB,UAAU;EACV;EACA,SAAS;EACT,eAAe;EACf;EACA;EACA;EACA;EACA;EACA;;cAKW,kBAAkB;EA+BpB,SAAS;UACR;UAGA;UACA;WAnCD;UAKD;UAEA;UAEA;UACA;UAEA;UACA;UAGA;UAGA;UAQA;EAER,YACS,UAAS,0BACR,sBACN,YAAY,mBAAmB,yBAEzB,8CACA,gBAAgB;EAGnB;EAQA;;;;;;;;;;EA2BA,iBACL,MAAM,kBACN,eAAe;;EA0EV;;;;EAWA;;;;;;;;;;EAiBA,4BAA4B;UA0C3B;MA4BG,aAAa;EAIjB;EAMA,WAAW,SAAS;EAIpB,aAAa,SAAS,QAAQ;EAI9B,WACL,eACA,WAAW,qBACX;EA0BK,gBAAgB,oBAAoB;EAIpC,uBAAuB,YAAY;;EAKnC,oBACL,eAAe,YAAY;EAKtB,mBACL,iBAAiB,mBAAmB;;;;;;;EAyB/B,kBACL,YAAY,YAAY,MAAM,oBAC9B,6BACA,mCACA,uBAAuB,6BACvB;UAwKM;EAWD,oBACL,cAAc,0BAA0B;UAoElC;UA6BA;UAaA;YAOE,2BACR,YACC,6BAA6B;YAStB,yBACR,MACA,QACC,2BAA2B;UAetB;YAKU,iCAChB,KAAK,wBACF;YAGa,+BAChB,KAAK,wBACF;YAEK,0BAA0B;EAiD7B,yBAAyB,QAAQ;EAYjC,QAAQ,MAAM;UAwCb;UAWA;UAUA;EAQD,2BAA2B,KAChC;UAeM;;;;;;EA2CD,qBAAqB,MAAM,mBAAmB;UAwB7C;EA+BD,WACL,OAAM,8BACN,cAAa,cACZ;EAuJU,YACX,MAAM,kBACN,cAAa,cACZ,QAAQ;YASD,iBACR,gBACA,oBACA,mBAAmB,sBAClB;UAeW;UA2BN;EA6CD,mBACL,MAAM,kBACN,QAAQ,kBACR,SAAS,mBACT;UAQM;UAqCA;UAgBA;UAuBA;EAaD,iBAAiB;UAIhB;UAIA;EAmjBD,cACL,6CACA,QAAQ,oBACP;EAyBI,cACL,QAAQ,mBACR,WAAU,mBACT;EAkDI,eACL,QAAQ,mBACR,eAAc;EAKT,kBACL,UAAU,kBACV;UAqBM;UAiEA;UA+DA;UASA"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { DEFAULT_EXPANDED_REGION, DEFAULT_RENDER_RANGE, DEFAULT_THEMES, DEFAULT_TOKENIZE_MAX_LENGTH } from "../constants.js";
|
|
2
|
-
import {
|
|
2
|
+
import { HighlighterDisposedError } from "../highlighter/highlighterType.js";
|
|
3
3
|
import { areThemesAttached } from "../highlighter/themes/areThemesAttached.js";
|
|
4
4
|
import { getHighlighterIfLoaded, getSharedHighlighter } from "../highlighter/shared_highlighter.js";
|
|
5
|
+
import { resolvePreferredHighlighter } from "../utils/resolvePreferredHighlighter.js";
|
|
5
6
|
import { getFileAnnotations, shouldRenderFileAnnotations } from "../utils/includesFileAnnotations.js";
|
|
6
7
|
import { createGutterGap, createGutterItem, createGutterWrapper, createHastElement } from "../utils/hast_utils.js";
|
|
8
|
+
import { hastToHtml } from "../utils/hastToHtml.js";
|
|
9
|
+
import { areLanguagesAttached } from "../highlighter/languages/areLanguagesAttached.js";
|
|
7
10
|
import { applyLineTextWithNewline } from "../utils/applyLineTextWithNewline.js";
|
|
8
11
|
import { areRenderRangesEqual } from "../utils/areRenderRangesEqual.js";
|
|
9
12
|
import { createAnnotationElement } from "../utils/createAnnotationElement.js";
|
|
@@ -14,6 +17,7 @@ import { getFiletypeFromFileName } from "../utils/getFiletypeFromFileName.js";
|
|
|
14
17
|
import { getHighlighterOptions } from "../utils/getHighlighterOptions.js";
|
|
15
18
|
import { getLineAnnotationName } from "../utils/getLineAnnotationName.js";
|
|
16
19
|
import { isDefaultRenderRange } from "../utils/isDefaultRenderRange.js";
|
|
20
|
+
import { isHandledWorkerPoolError } from "../worker/errors.js";
|
|
17
21
|
import { areDiffTargetsEqual } from "../utils/areDiffTargetsEqual.js";
|
|
18
22
|
import { getTrailingContextRangeSize } from "../utils/virtualDiffLayout.js";
|
|
19
23
|
import { iterateOverDiff } from "../utils/iterateOverDiff.js";
|
|
@@ -28,7 +32,6 @@ import { getHunkSeparatorSlotName } from "../utils/getHunkSeparatorSlotName.js";
|
|
|
28
32
|
import { getTotalLineCountFromHunks } from "../utils/getTotalLineCountFromHunks.js";
|
|
29
33
|
import { isDiffPlainText } from "../utils/isDiffPlainText.js";
|
|
30
34
|
import { renderDiffWithHighlighter } from "../utils/renderDiffWithHighlighter.js";
|
|
31
|
-
import { toHtml } from "hast-util-to-html";
|
|
32
35
|
//#region src/renderers/DiffHunksRenderer.ts
|
|
33
36
|
let instanceId = -1;
|
|
34
37
|
var DiffHunksRenderer = class {
|
|
@@ -37,7 +40,6 @@ var DiffHunksRenderer = class {
|
|
|
37
40
|
onRenderUpdate;
|
|
38
41
|
workerManager;
|
|
39
42
|
__id = `diff-hunks-renderer:${++instanceId}`;
|
|
40
|
-
highlighter;
|
|
41
43
|
diff;
|
|
42
44
|
expandedHunks = /* @__PURE__ */ new Map();
|
|
43
45
|
deletionAnnotations = {};
|
|
@@ -52,7 +54,6 @@ var DiffHunksRenderer = class {
|
|
|
52
54
|
this.annotationSlotName = annotationSlotName;
|
|
53
55
|
this.onRenderUpdate = onRenderUpdate;
|
|
54
56
|
this.workerManager = workerManager;
|
|
55
|
-
if (workerManager?.isWorkingPool() !== true) this.highlighter = areThemesAttached(options.theme ?? DEFAULT_THEMES) ? getHighlighterIfLoaded() : void 0;
|
|
56
57
|
}
|
|
57
58
|
cleanUp() {
|
|
58
59
|
this.endEditSession();
|
|
@@ -62,7 +63,6 @@ var DiffHunksRenderer = class {
|
|
|
62
63
|
this.onRenderUpdate = void 0;
|
|
63
64
|
}
|
|
64
65
|
recycle() {
|
|
65
|
-
this.highlighter = void 0;
|
|
66
66
|
this.diff = void 0;
|
|
67
67
|
if (this.editSessionActive) {
|
|
68
68
|
if (this.renderCache != null) this.renderCache.renderRange = void 0;
|
|
@@ -148,7 +148,9 @@ var DiffHunksRenderer = class {
|
|
|
148
148
|
workerManager.evictDiffFromCache(diff.cacheKey);
|
|
149
149
|
return workerManager.primeDiffHighlightCache(diff).then(() => {
|
|
150
150
|
this.applyRefreshedResult(diff, workerManager.getDiffResultCache(diff));
|
|
151
|
-
}).catch((error) =>
|
|
151
|
+
}).catch((error) => {
|
|
152
|
+
if (!isHandledWorkerPoolError(error)) this.onHighlightError(error);
|
|
153
|
+
});
|
|
152
154
|
}
|
|
153
155
|
return this.asyncHighlight(diff).then((fresh) => this.applyRefreshedResult(diff, fresh)).catch((error) => this.onHighlightError(error));
|
|
154
156
|
}
|
|
@@ -242,6 +244,7 @@ var DiffHunksRenderer = class {
|
|
|
242
244
|
const previous = diff.additionLines[line] ?? "";
|
|
243
245
|
if (previous !== text) {
|
|
244
246
|
diff.additionLines[line] = text;
|
|
247
|
+
diff.additionCharacterCount += text.length - previous.length;
|
|
245
248
|
changedAdditionLines.push(line);
|
|
246
249
|
previousAdditionLines.set(line, previous);
|
|
247
250
|
if (!dirtyLines.has(line)) hastLines[line] = createPlainAdditionLineElement(line, cleanLastNewline(text));
|
|
@@ -255,7 +258,9 @@ var DiffHunksRenderer = class {
|
|
|
255
258
|
const prevLine = canSyncDiffLine ? diff.additionLines[line] ?? "" : "";
|
|
256
259
|
const prevText = cleanLastNewline(prevLine);
|
|
257
260
|
if (pendingStructuralRows == null && canSyncDiffLine && changedDocumentLines?.has(line) !== true) {
|
|
258
|
-
|
|
261
|
+
const nextLine = applyLineTextWithNewline(prevLine, lineText);
|
|
262
|
+
diff.additionLines[line] = nextLine;
|
|
263
|
+
diff.additionCharacterCount += nextLine.length - prevLine.length;
|
|
259
264
|
if (prevText !== lineText) {
|
|
260
265
|
changedAdditionLines.push(line);
|
|
261
266
|
previousAdditionLines.set(line, prevLine);
|
|
@@ -306,7 +311,7 @@ var DiffHunksRenderer = class {
|
|
|
306
311
|
this.applyRecomputePreservingSessionType(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
|
|
307
312
|
regionsChanged = true;
|
|
308
313
|
} else if (shouldTopAlignAdditionRecompute(diff, diff.additionLines)) {
|
|
309
|
-
this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, diff.additionLines, this.options.parseDiffOptions));
|
|
314
|
+
this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, diff.additionLines, diff.additionCharacterCount, this.options.parseDiffOptions));
|
|
310
315
|
regionsChanged = true;
|
|
311
316
|
} else {
|
|
312
317
|
const change = applySessionChangedLines(diff, changedAdditionLines, this.options.parseDiffOptions, previousAdditionLines);
|
|
@@ -330,7 +335,9 @@ var DiffHunksRenderer = class {
|
|
|
330
335
|
const result = renderCache?.result;
|
|
331
336
|
if (diff.isPartial) throw new Error("Could not apply document change for partial diff");
|
|
332
337
|
const { additionLines: previousAdditionLines } = diff;
|
|
333
|
-
|
|
338
|
+
const { lines, characterCount } = getEditorDocumentLines(textDocument);
|
|
339
|
+
diff.additionLines = lines;
|
|
340
|
+
diff.additionCharacterCount = characterCount;
|
|
334
341
|
if (result != null) result.code.additionLines = realignAdditionHastLines(previousAdditionLines, diff.additionLines, result.code.additionLines, textDocument);
|
|
335
342
|
if (diff.additionLines.length <= 1 && diff.additionLines.join("") === "") {
|
|
336
343
|
this.applyRecomputePreservingSessionType(diff, recomputeEmptyDocumentDiff(diff, this.options.parseDiffOptions));
|
|
@@ -346,7 +353,7 @@ var DiffHunksRenderer = class {
|
|
|
346
353
|
const { parseDiffOptions } = this.options;
|
|
347
354
|
const rawLines = diff.additionLines;
|
|
348
355
|
if (shouldTopAlignAdditionRecompute(diff, rawLines)) {
|
|
349
|
-
this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, rawLines, parseDiffOptions));
|
|
356
|
+
this.applyRecomputePreservingSessionType(diff, recomputeTopAlignedAdditionDiff(diff, rawLines, diff.additionCharacterCount, parseDiffOptions));
|
|
350
357
|
return;
|
|
351
358
|
}
|
|
352
359
|
this.applyExpansionRemap(rebuildSessionHunks(diff, parseDiffOptions, (index) => previousAdditionLines[index]));
|
|
@@ -403,12 +410,11 @@ var DiffHunksRenderer = class {
|
|
|
403
410
|
useCSSClasses
|
|
404
411
|
};
|
|
405
412
|
}
|
|
406
|
-
|
|
407
|
-
|
|
413
|
+
initializeHighlighter() {
|
|
414
|
+
return getSharedHighlighter(getHighlighterOptions(this.computedLangs, {
|
|
408
415
|
theme: this.getLocalHighlightTheme(),
|
|
409
|
-
preferredHighlighter: this.workerManager
|
|
416
|
+
preferredHighlighter: resolvePreferredHighlighter(this.workerManager, this.options)
|
|
410
417
|
}));
|
|
411
|
-
return this.highlighter;
|
|
412
418
|
}
|
|
413
419
|
hydrate(diff) {
|
|
414
420
|
if (diff == null) return;
|
|
@@ -425,13 +431,24 @@ var DiffHunksRenderer = class {
|
|
|
425
431
|
result: massiveDiff ? void 0 : cache?.result,
|
|
426
432
|
renderRange: void 0
|
|
427
433
|
};
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
434
|
+
const workerManager = this.getHighlightWorkerManager(diff);
|
|
435
|
+
if (workerManager != null) {
|
|
436
|
+
if (this.renderCache.result == null && !massiveDiff) workerManager.highlightDiffAST(this, this.diff);
|
|
437
|
+
} else if (getHighlighterIfLoaded({ theme: this.getLocalHighlightTheme() }) == null) {
|
|
431
438
|
this.computedLangs = getDiffLanguages(diff);
|
|
432
|
-
this.initializeHighlighter()
|
|
439
|
+
this.initializeHighlighter().catch((error) => {
|
|
440
|
+
if (!(error instanceof HighlighterDisposedError)) this.onHighlightError(error);
|
|
441
|
+
});
|
|
433
442
|
}
|
|
434
443
|
}
|
|
444
|
+
getHighlightWorkerManager(diff) {
|
|
445
|
+
const { editSessionActive, workerManager } = this;
|
|
446
|
+
return !editSessionActive && workerManager?.isWorkingPool() === true && !workerManager.shouldHighlightOnMainThread(diff) ? workerManager : void 0;
|
|
447
|
+
}
|
|
448
|
+
cacheHighlightResult(diff, renderResult) {
|
|
449
|
+
const { editSessionActive, workerManager } = this;
|
|
450
|
+
if (!editSessionActive && workerManager?.isWorkingPool() === true) workerManager.setDiffResultCache(diff.cacheKey, renderResult);
|
|
451
|
+
}
|
|
435
452
|
getLocalHighlightTheme() {
|
|
436
453
|
return this.workerManager?.getDiffRenderOptions().theme ?? this.options.theme ?? DEFAULT_THEMES;
|
|
437
454
|
}
|
|
@@ -492,10 +509,10 @@ var DiffHunksRenderer = class {
|
|
|
492
509
|
canRenderDiff(diff, options, forcePlainText) {
|
|
493
510
|
const { renderCache } = this;
|
|
494
511
|
if (renderCache == null || areDiffTargetsEqual(renderCache.diff, diff)) return true;
|
|
495
|
-
if (forcePlainText) return renderCache.result == null && renderCache.hydrated !== true || this.workerManager?.isWorkingPool() === true
|
|
512
|
+
if (forcePlainText) return renderCache.result == null && renderCache.hydrated !== true || this.workerManager?.isWorkingPool() === true && !this.workerManager.shouldHighlightOnMainThread(diff) || getHighlighterIfLoaded({ theme: options.theme }) != null;
|
|
496
513
|
if (renderCache.result == null && renderCache.hydrated !== true) return true;
|
|
497
|
-
if (
|
|
498
|
-
return
|
|
514
|
+
if (this.getHighlightWorkerManager(diff) != null) return !renderCache.highlighted;
|
|
515
|
+
return getHighlighterIfLoaded({ theme: options.theme }) != null;
|
|
499
516
|
}
|
|
500
517
|
renderDiff(diff = this.diff, renderRange = DEFAULT_RENDER_RANGE) {
|
|
501
518
|
this.diff = diff;
|
|
@@ -527,24 +544,26 @@ var DiffHunksRenderer = class {
|
|
|
527
544
|
const canRenderDiff = this.canRenderDiff(diff, options, forcePlainText);
|
|
528
545
|
const newContent = !areDiffTargetsEqual(diff, this.renderCache.diff);
|
|
529
546
|
const newRenderRange = !areRenderRangesEqual(this.renderCache.renderRange, renderRange);
|
|
530
|
-
|
|
547
|
+
const workerManager = this.getHighlightWorkerManager(diff);
|
|
548
|
+
if (workerManager != null) {
|
|
531
549
|
const preserveHydratedContent = this.renderCache.result == null && this.renderCache.highlighted && !forcePlainText && !newContent && isDefaultRenderRange(renderRange);
|
|
532
550
|
if (canRenderDiff && !preserveHydratedContent && (forcePlainText || this.renderCache.result == null || !this.renderCache.highlighted && (newContent || newRenderRange))) {
|
|
533
551
|
this.renderCache.diff = diff;
|
|
534
552
|
this.renderCache.options = options;
|
|
535
553
|
this.renderCache.highlighted = false;
|
|
536
|
-
if (this.renderCache.result == null || newContent || newRenderRange || forceHighlight) this.renderCache.result =
|
|
554
|
+
if (this.renderCache.result == null || newContent || newRenderRange || forceHighlight) this.renderCache.result = workerManager.getPlainDiffAST(diff, renderRange.startingLine, renderRange.totalLines, isDefaultRenderRange(renderRange) ? true : expandUnchanged ? true : this.expandedHunks, collapsedContextThreshold);
|
|
537
555
|
this.renderCache.renderRange = renderRange;
|
|
538
556
|
}
|
|
539
|
-
if (!forcePlainText && hasContent && (!this.renderCache.highlighted || forceHighlight))
|
|
557
|
+
if (!forcePlainText && hasContent && (!this.renderCache.highlighted || forceHighlight)) workerManager.highlightDiffAST(this, diff);
|
|
540
558
|
} else {
|
|
541
559
|
this.computedLangs = getDiffLanguages(diff);
|
|
542
|
-
|
|
543
|
-
const hasThemes =
|
|
544
|
-
const hasLangs =
|
|
560
|
+
const highlighter = getHighlighterIfLoaded();
|
|
561
|
+
const hasThemes = highlighter != null && areThemesAttached(options.theme, highlighter);
|
|
562
|
+
const hasLangs = highlighter != null && areLanguagesAttached(this.computedLangs, highlighter);
|
|
545
563
|
const canHighlight = !forcePlainText && hasLangs;
|
|
546
|
-
|
|
547
|
-
|
|
564
|
+
const lazyLineAST = Number.isFinite(renderRange.totalLines);
|
|
565
|
+
if (canRenderDiff && highlighter != null && hasThemes && (forceHighlight || forcePlainText || !this.renderCache.highlighted && canHighlight || this.renderCache.result == null)) {
|
|
566
|
+
const { result, options } = this.renderDiffWithHighlighter(diff, highlighter, forcePlainText || !hasLangs, lazyLineAST);
|
|
548
567
|
this.renderCache = {
|
|
549
568
|
diff,
|
|
550
569
|
options,
|
|
@@ -552,16 +571,26 @@ var DiffHunksRenderer = class {
|
|
|
552
571
|
result,
|
|
553
572
|
renderRange: void 0
|
|
554
573
|
};
|
|
574
|
+
if (canHighlight) this.cacheHighlightResult(diff, {
|
|
575
|
+
result,
|
|
576
|
+
options
|
|
577
|
+
});
|
|
555
578
|
}
|
|
556
|
-
if (!hasThemes || !forcePlainText && !hasLangs) this.asyncHighlight(diff).then(({ result, options }) => {
|
|
579
|
+
if (!hasThemes || !forcePlainText && !hasLangs) this.asyncHighlight(diff, lazyLineAST).then(({ result, options }) => {
|
|
580
|
+
if (!forcePlainText) this.cacheHighlightResult(diff, {
|
|
581
|
+
result,
|
|
582
|
+
options
|
|
583
|
+
});
|
|
557
584
|
this.applyHighlightResult(diff, result, options, !forcePlainText);
|
|
585
|
+
}).catch((error) => {
|
|
586
|
+
if (!(error instanceof HighlighterDisposedError)) this.onHighlightError(error);
|
|
558
587
|
});
|
|
559
588
|
}
|
|
560
589
|
return this.renderCache.result != null ? this.processDiffResult(this.renderCache.diff, renderRange, this.renderCache.result) : void 0;
|
|
561
590
|
}
|
|
562
591
|
async asyncRender(diff, renderRange = DEFAULT_RENDER_RANGE) {
|
|
563
592
|
this.diff = diff;
|
|
564
|
-
const { result } = await this.asyncHighlight(diff);
|
|
593
|
+
const { result } = await this.asyncHighlight(diff, Number.isFinite(renderRange.totalLines));
|
|
565
594
|
return this.processDiffResult(diff, renderRange, result);
|
|
566
595
|
}
|
|
567
596
|
createPreElement(split, totalLines, customProperties) {
|
|
@@ -577,19 +606,21 @@ var DiffHunksRenderer = class {
|
|
|
577
606
|
customProperties
|
|
578
607
|
});
|
|
579
608
|
}
|
|
580
|
-
async asyncHighlight(diff) {
|
|
609
|
+
async asyncHighlight(diff, lazyLineAST = false) {
|
|
581
610
|
const forcePlainText = isDiffMassive(diff, this.getTokenizeMaxLength());
|
|
582
611
|
this.computedLangs = forcePlainText ? ["text"] : getDiffLanguages(diff);
|
|
583
|
-
|
|
584
|
-
const
|
|
585
|
-
|
|
586
|
-
|
|
612
|
+
let highlighter = getHighlighterIfLoaded();
|
|
613
|
+
const hasThemes = highlighter != null && areThemesAttached(this.getLocalHighlightTheme(), highlighter);
|
|
614
|
+
const hasLangs = forcePlainText || highlighter != null && areLanguagesAttached(this.computedLangs, highlighter);
|
|
615
|
+
if (highlighter == null || !hasThemes || !hasLangs) highlighter = await this.initializeHighlighter();
|
|
616
|
+
return this.renderDiffWithHighlighter(diff, highlighter, forcePlainText, lazyLineAST);
|
|
587
617
|
}
|
|
588
|
-
renderDiffWithHighlighter(diff, highlighter, forcePlainText = false) {
|
|
618
|
+
renderDiffWithHighlighter(diff, highlighter, forcePlainText = false, lazyLineAST = false) {
|
|
589
619
|
const { options } = this.getRenderOptions(diff);
|
|
590
620
|
const { collapsedContextThreshold } = this.getOptionsWithDefaults();
|
|
591
621
|
const result = renderDiffWithHighlighter(diff, highlighter, options, {
|
|
592
622
|
forcePlainText,
|
|
623
|
+
lazyLineAST,
|
|
593
624
|
expandedHunks: forcePlainText ? true : void 0,
|
|
594
625
|
collapsedContextThreshold
|
|
595
626
|
});
|
|
@@ -882,7 +913,7 @@ var DiffHunksRenderer = class {
|
|
|
882
913
|
}
|
|
883
914
|
}
|
|
884
915
|
}
|
|
885
|
-
if (noEOFCRAddition) {
|
|
916
|
+
if (noEOFCRAddition && !(unified && noEOFCRDeletion && type !== "change")) {
|
|
886
917
|
const noEOFType = type === "context" || type === "context-expanded" ? type : "change-addition";
|
|
887
918
|
if (diffStyle === "unified") {
|
|
888
919
|
context.unifiedContentAST.push(createNoNewlineElement(noEOFType));
|
|
@@ -992,11 +1023,11 @@ var DiffHunksRenderer = class {
|
|
|
992
1023
|
};
|
|
993
1024
|
}
|
|
994
1025
|
renderFullHTML(result, tempChildren = []) {
|
|
995
|
-
return
|
|
1026
|
+
return hastToHtml(this.renderFullAST(result, tempChildren));
|
|
996
1027
|
}
|
|
997
1028
|
renderPartialHTML(children, columnType) {
|
|
998
|
-
if (columnType == null) return
|
|
999
|
-
return
|
|
1029
|
+
if (columnType == null) return hastToHtml(children);
|
|
1030
|
+
return hastToHtml(createHastElement({
|
|
1000
1031
|
tagName: "code",
|
|
1001
1032
|
children,
|
|
1002
1033
|
properties: {
|
|
@@ -1272,8 +1303,16 @@ function createPlainAdditionLineElement(lineIndex, lineText, unifiedLineIndex =
|
|
|
1272
1303
|
}
|
|
1273
1304
|
function getEditorDocumentLines(textDocument) {
|
|
1274
1305
|
const lines = [];
|
|
1275
|
-
|
|
1276
|
-
|
|
1306
|
+
let characterCount = 0;
|
|
1307
|
+
for (let line = 0; line < textDocument.lineCount; line++) {
|
|
1308
|
+
const text = textDocument.getLineText(line, true);
|
|
1309
|
+
lines.push(text);
|
|
1310
|
+
characterCount += text.length;
|
|
1311
|
+
}
|
|
1312
|
+
return {
|
|
1313
|
+
lines,
|
|
1314
|
+
characterCount
|
|
1315
|
+
};
|
|
1277
1316
|
}
|
|
1278
1317
|
function getDiffLanguages(diff) {
|
|
1279
1318
|
if (diff.lang != null) return [diff.lang];
|