@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
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { CUSTOM_HEADER_SLOT_ID, DEFAULT_THEMES, EMPTY_RENDER_RANGE, HEADER_FILENAME_SUFFIX_SLOT_ID, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID } from "../constants.js";
|
|
1
|
+
import { CUSTOM_HEADER_SLOT_ID, DEFAULT_THEMES, EMPTY_LINE_ANNOTATIONS, EMPTY_RENDER_RANGE, HEADER_FILENAME_SUFFIX_SLOT_ID, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID } from "../constants.js";
|
|
2
|
+
import { HighlighterDisposedError } from "../highlighter/highlighterType.js";
|
|
2
3
|
import { getThemes } from "../utils/getThemes.js";
|
|
3
4
|
import { getHighlighterIfLoaded, getSharedHighlighter } from "../highlighter/shared_highlighter.js";
|
|
4
5
|
import { dequeueRender, queueRender } from "../managers/UniversalRenderingManager.js";
|
|
5
6
|
import { areThemesEqual } from "../utils/areThemesEqual.js";
|
|
6
7
|
import { isStyleNode } from "../utils/isStyleNode.js";
|
|
7
8
|
import { isSafari } from "../utils/platform.js";
|
|
9
|
+
import { resolvePreferredHighlighter } from "../utils/resolvePreferredHighlighter.js";
|
|
10
|
+
import { hastToHtml } from "../utils/hastToHtml.js";
|
|
8
11
|
import { InteractionManager, pluckInteractionOptions } from "../managers/InteractionManager.js";
|
|
9
12
|
import { ResizeManager } from "../managers/ResizeManager.js";
|
|
10
13
|
import { areRenderRangesEqual } from "../utils/areRenderRangesEqual.js";
|
|
@@ -45,7 +48,6 @@ import { DiffHunksRenderer } from "../renderers/DiffHunksRenderer.js";
|
|
|
45
48
|
import { areDiffLineAnnotationsEqual } from "../utils/areDiffLineAnnotationsEqual.js";
|
|
46
49
|
import { areHunkDataEqual } from "../utils/areHunkDataEqual.js";
|
|
47
50
|
import { getDiffHunksRendererOptions } from "../utils/getDiffHunksRendererOptions.js";
|
|
48
|
-
import { toHtml } from "hast-util-to-html";
|
|
49
51
|
//#region src/components/FileDiff.ts
|
|
50
52
|
function canHydrateDiff(fileDiff) {
|
|
51
53
|
return fileDiff.isPartial && (fileDiff.type === "change" || fileDiff.type === "rename-changed" || fileDiff.type === "rename-pure");
|
|
@@ -67,16 +69,16 @@ function shouldResetUndoState(prevDiff, nextDiff) {
|
|
|
67
69
|
function areLinesEqual(first, second) {
|
|
68
70
|
return first.length === second.length && first.every((line, index) => line === second[index]);
|
|
69
71
|
}
|
|
70
|
-
function canRestoreDiffSession(snapshot,
|
|
72
|
+
function canRestoreDiffSession(snapshot, inputDiff) {
|
|
71
73
|
const { oldFile } = snapshot;
|
|
72
|
-
if (oldFile == null) return
|
|
73
|
-
return
|
|
74
|
+
if (oldFile == null) return inputDiff.type === "new";
|
|
75
|
+
return inputDiff.type !== "new" && oldFile.name === (inputDiff.prevName ?? inputDiff.name) && areLinesEqual(oldFile.lines, inputDiff.deletionLines);
|
|
74
76
|
}
|
|
75
77
|
let instanceId = -1;
|
|
76
78
|
var FileDiff = class {
|
|
77
79
|
options;
|
|
78
80
|
workerManager;
|
|
79
|
-
|
|
81
|
+
requestOwnerRender;
|
|
80
82
|
static LoadedCustomComponent = true;
|
|
81
83
|
__id = `file-diff:${++instanceId}`;
|
|
82
84
|
type = "file-diff";
|
|
@@ -107,13 +109,17 @@ var FileDiff = class {
|
|
|
107
109
|
scrollSyncManager;
|
|
108
110
|
interactionManager;
|
|
109
111
|
annotationCache = /* @__PURE__ */ new Map();
|
|
110
|
-
lineAnnotations
|
|
112
|
+
get lineAnnotations() {
|
|
113
|
+
return this.renderedData?.lineAnnotations ?? EMPTY_LINE_ANNOTATIONS;
|
|
114
|
+
}
|
|
111
115
|
managersDirty = false;
|
|
112
116
|
deletionFile;
|
|
113
117
|
additionFile;
|
|
114
118
|
fileDiff;
|
|
115
119
|
editSession;
|
|
116
|
-
|
|
120
|
+
renderedData;
|
|
121
|
+
pendingData;
|
|
122
|
+
forceRenderOverride;
|
|
117
123
|
renderRange;
|
|
118
124
|
pendingFiles;
|
|
119
125
|
appliedPreAttributes;
|
|
@@ -130,10 +136,10 @@ var FileDiff = class {
|
|
|
130
136
|
lineStateRefreshPending = false;
|
|
131
137
|
deferredSelectedLines;
|
|
132
138
|
deferredEditorActiveLine;
|
|
133
|
-
constructor(options = { theme: DEFAULT_THEMES }, workerManager,
|
|
139
|
+
constructor(options = { theme: DEFAULT_THEMES }, workerManager, requestOwnerRender) {
|
|
134
140
|
this.options = options;
|
|
135
141
|
this.workerManager = workerManager;
|
|
136
|
-
this.
|
|
142
|
+
this.requestOwnerRender = requestOwnerRender;
|
|
137
143
|
this.hunksRenderer = this.createHunksRenderer(options);
|
|
138
144
|
this.resizeManager = new ResizeManager();
|
|
139
145
|
this.scrollSyncManager = new ScrollSyncManager();
|
|
@@ -252,27 +258,35 @@ var FileDiff = class {
|
|
|
252
258
|
return resolveEditSessionSlotName(this.editSession?.annotations, annotation, getLineAnnotationName);
|
|
253
259
|
};
|
|
254
260
|
getLatestAnnotations() {
|
|
255
|
-
return this.editSession?.annotations?.current ?? this.lineAnnotations;
|
|
261
|
+
return this.pendingData?.lineAnnotations ?? this.editSession?.annotations?.current ?? this.lineAnnotations;
|
|
262
|
+
}
|
|
263
|
+
getAnnotationsForDiff(fileDiff) {
|
|
264
|
+
const { pendingData } = this;
|
|
265
|
+
return pendingData != null && areDiffTargetsEqual(fileDiff, pendingData.fileDiff) ? pendingData.lineAnnotations : this.lineAnnotations;
|
|
256
266
|
}
|
|
257
267
|
isNewAnnotations(lineAnnotations) {
|
|
258
268
|
const session = this.editSession?.annotations;
|
|
259
|
-
if (lineAnnotations === this.
|
|
269
|
+
if (lineAnnotations === this.getLatestAnnotations()) return false;
|
|
260
270
|
return session == null || lineAnnotations !== session.provided && lineAnnotations !== session.current;
|
|
261
271
|
}
|
|
262
272
|
setLineAnnotations(lineAnnotations) {
|
|
263
273
|
const sessionAnnotations = this.editSession?.annotations;
|
|
264
|
-
if (sessionAnnotations
|
|
265
|
-
this.lineAnnotations
|
|
266
|
-
|
|
274
|
+
if (sessionAnnotations != null) {
|
|
275
|
+
if (!this.isNewAnnotations(lineAnnotations)) return;
|
|
276
|
+
writeEditSessionAnnotations(sessionAnnotations, lineAnnotations, getLineAnnotationName);
|
|
267
277
|
}
|
|
268
|
-
|
|
269
|
-
this.
|
|
270
|
-
|
|
278
|
+
const fileDiff = this.getWorkingDiff();
|
|
279
|
+
if (fileDiff != null) this.pendingData = {
|
|
280
|
+
fileDiff,
|
|
281
|
+
lineAnnotations
|
|
282
|
+
};
|
|
271
283
|
}
|
|
272
284
|
syncEditSessionAnnotationsFromEditor(lineAnnotations) {
|
|
273
285
|
const session = this.editSession?.annotations;
|
|
274
286
|
if (session == null || lineAnnotations === session.current) return false;
|
|
275
287
|
session.current = lineAnnotations;
|
|
288
|
+
if (this.renderedData != null) this.renderedData.lineAnnotations = lineAnnotations;
|
|
289
|
+
this.pendingData = void 0;
|
|
276
290
|
this.hunksRenderer.setLineAnnotations(lineAnnotations);
|
|
277
291
|
this.renderAnnotations();
|
|
278
292
|
return true;
|
|
@@ -317,7 +331,7 @@ var FileDiff = class {
|
|
|
317
331
|
}
|
|
318
332
|
shouldApplyColumnVariables(overflow) {
|
|
319
333
|
if (typeof this.options.hunkSeparators === "function") return true;
|
|
320
|
-
return overflow === "scroll" && (this.
|
|
334
|
+
return overflow === "scroll" && (this.lineAnnotations.length > 0 || this.pre?.hasAttribute("data-has-merge-conflict") === true);
|
|
321
335
|
}
|
|
322
336
|
getCodeScrollLeft() {
|
|
323
337
|
return Math.max(this.codeUnified?.scrollLeft ?? 0, this.codeDeletions?.scrollLeft ?? 0, this.codeAdditions?.scrollLeft ?? 0);
|
|
@@ -346,10 +360,13 @@ var FileDiff = class {
|
|
|
346
360
|
this.workerManager?.unsubscribeToThemeChanges(this);
|
|
347
361
|
this.renderRange = void 0;
|
|
348
362
|
if (!recycle) this.pendingFiles = void 0;
|
|
349
|
-
if (!this.
|
|
363
|
+
if (!this.isComponentManaged) this.fileContainer?.remove();
|
|
350
364
|
this.fileContainer = void 0;
|
|
351
365
|
this.mounted = false;
|
|
352
|
-
if (!recycle)
|
|
366
|
+
if (!recycle) {
|
|
367
|
+
this.renderedData = void 0;
|
|
368
|
+
this.pendingData = void 0;
|
|
369
|
+
}
|
|
353
370
|
this.clearAuxiliaryNodes();
|
|
354
371
|
this.annotationCache.clear();
|
|
355
372
|
this.pre = void 0;
|
|
@@ -385,7 +402,6 @@ var FileDiff = class {
|
|
|
385
402
|
this.workerManager = void 0;
|
|
386
403
|
this.fileDiff = void 0;
|
|
387
404
|
this.editSession = void 0;
|
|
388
|
-
this.renderedDiff = void 0;
|
|
389
405
|
this.deletionFile = void 0;
|
|
390
406
|
this.additionFile = void 0;
|
|
391
407
|
}
|
|
@@ -474,14 +490,19 @@ var FileDiff = class {
|
|
|
474
490
|
this.hydrateMeasuredScrollbar();
|
|
475
491
|
}
|
|
476
492
|
hydrationSetup({ fileDiff, oldFile, newFile, lineAnnotations }) {
|
|
477
|
-
|
|
493
|
+
const hydratedAnnotations = lineAnnotations ?? this.getLatestAnnotations();
|
|
494
|
+
this.pendingData = void 0;
|
|
478
495
|
this.additionFile = newFile;
|
|
479
496
|
this.deletionFile = oldFile;
|
|
480
497
|
this.fileDiff = fileDiff ?? (oldFile !== void 0 && newFile !== void 0 ? parseDiffFromFile(oldFile, newFile, this.options.parseDiffOptions) : void 0);
|
|
498
|
+
this.renderedData = this.fileDiff != null ? {
|
|
499
|
+
fileDiff: this.fileDiff,
|
|
500
|
+
lineAnnotations: hydratedAnnotations
|
|
501
|
+
} : void 0;
|
|
502
|
+
if (this.fileDiff != null) this.adoptRenderData(this.fileDiff);
|
|
481
503
|
if (this.pre == null) return;
|
|
482
504
|
this.syncInteractionOptions();
|
|
483
505
|
this.hunksRenderer.hydrate(this.fileDiff);
|
|
484
|
-
this.renderedDiff = this.fileDiff;
|
|
485
506
|
this.renderAnnotations();
|
|
486
507
|
this.renderGutterUtility();
|
|
487
508
|
this.injectUnsafeCSS();
|
|
@@ -489,12 +510,23 @@ var FileDiff = class {
|
|
|
489
510
|
this.flushManagers();
|
|
490
511
|
}
|
|
491
512
|
rerender() {
|
|
492
|
-
if (!this.enabled || this.
|
|
513
|
+
if (!this.enabled || this.getInputDiff() == null && this.additionFile == null && this.deletionFile == null) return;
|
|
514
|
+
if (this.requestRender()) return;
|
|
493
515
|
this.render({
|
|
494
516
|
forceRender: true,
|
|
495
517
|
renderRange: this.renderRange
|
|
496
518
|
});
|
|
497
519
|
}
|
|
520
|
+
requestRender() {
|
|
521
|
+
const { requestOwnerRender } = this;
|
|
522
|
+
if (this.editSession != null || requestOwnerRender == null) return false;
|
|
523
|
+
this.forceRenderOverride = true;
|
|
524
|
+
requestOwnerRender();
|
|
525
|
+
return true;
|
|
526
|
+
}
|
|
527
|
+
get isComponentManaged() {
|
|
528
|
+
return this.requestOwnerRender != null;
|
|
529
|
+
}
|
|
498
530
|
onThemeChange() {
|
|
499
531
|
this.hunksRenderer.clearRenderCache();
|
|
500
532
|
this.rerender();
|
|
@@ -508,7 +540,8 @@ var FileDiff = class {
|
|
|
508
540
|
this.rerender();
|
|
509
541
|
};
|
|
510
542
|
loadFilesIfNecessary() {
|
|
511
|
-
const
|
|
543
|
+
const fileDiff = this.getInputDiff();
|
|
544
|
+
const { loadDiffFiles } = this.options;
|
|
512
545
|
if (fileDiff == null || !canHydrateDiff(fileDiff) || this.pendingFiles?.fileDiff === fileDiff) return;
|
|
513
546
|
if (loadDiffFiles == null) throw new Error("FileDiff: loadDiffFiles is required to load full files for a partial diff");
|
|
514
547
|
const promise = this.loadFilesForDiff(fileDiff, loadDiffFiles);
|
|
@@ -528,7 +561,8 @@ var FileDiff = class {
|
|
|
528
561
|
* `loadDiffFiles` was passed in to `options`
|
|
529
562
|
*/
|
|
530
563
|
__canAttachEditor() {
|
|
531
|
-
|
|
564
|
+
const fileDiff = this.getInputDiff();
|
|
565
|
+
return fileDiff != null && !fileDiff.isPartial;
|
|
532
566
|
}
|
|
533
567
|
/**
|
|
534
568
|
* Load a partial diff before starting a new edit session. Call this before
|
|
@@ -539,7 +573,8 @@ var FileDiff = class {
|
|
|
539
573
|
if (this.__canAttachEditor()) return;
|
|
540
574
|
const pending = this.__prepareForEditing();
|
|
541
575
|
if (pending == null) {
|
|
542
|
-
|
|
576
|
+
const fileDiff = this.getInputDiff();
|
|
577
|
+
if (fileDiff?.isPartial === true && !canHydrateDiff(fileDiff)) throw new Error("FileDiff.prepareForEditing: this partial diff cannot be hydrated; provide a complete diff");
|
|
543
578
|
throw new Error("FileDiff.prepareForEditing: a partial diff requires loadDiffFiles");
|
|
544
579
|
}
|
|
545
580
|
await pending;
|
|
@@ -548,14 +583,15 @@ var FileDiff = class {
|
|
|
548
583
|
/** Hydrate a diff if necessary */
|
|
549
584
|
__prepareForEditing() {
|
|
550
585
|
if (this.__canAttachEditor()) return;
|
|
551
|
-
|
|
586
|
+
const fileDiff = this.getInputDiff();
|
|
587
|
+
if (fileDiff?.isPartial === true && !canHydrateDiff(fileDiff)) throw new Error("FileDiff: this partial diff cannot be hydrated; provide a complete diff to edit");
|
|
552
588
|
this.loadFilesIfNecessary();
|
|
553
589
|
return this.pendingFiles?.promise;
|
|
554
590
|
}
|
|
555
591
|
async loadFilesForDiff(fileDiff, loadDiffFiles) {
|
|
556
592
|
try {
|
|
557
593
|
const files = await loadDiffFiles(fileDiff);
|
|
558
|
-
if (this.
|
|
594
|
+
if (this.getInputDiff() !== fileDiff) return;
|
|
559
595
|
await this.handleFilesLoaded(fileDiff, files);
|
|
560
596
|
} catch (error) {
|
|
561
597
|
if (this.options.disableErrorHandling === true) throw error;
|
|
@@ -563,7 +599,7 @@ var FileDiff = class {
|
|
|
563
599
|
}
|
|
564
600
|
}
|
|
565
601
|
async handleFilesLoaded(expectedDiff, files) {
|
|
566
|
-
if (this.
|
|
602
|
+
if (this.getInputDiff() !== expectedDiff || !expectedDiff.isPartial) return;
|
|
567
603
|
hydratePartialDiff("merge", expectedDiff, files);
|
|
568
604
|
this.setHydratedState(files);
|
|
569
605
|
if (this.installHydratedSessionDiff(expectedDiff)) {
|
|
@@ -571,58 +607,69 @@ var FileDiff = class {
|
|
|
571
607
|
return;
|
|
572
608
|
}
|
|
573
609
|
await awaitWithTimeout(() => this.primeHighlightCache(expectedDiff));
|
|
574
|
-
if (!this.enabled || this.
|
|
610
|
+
if (!this.enabled || this.getInputDiff() !== expectedDiff) return;
|
|
575
611
|
this.rerender();
|
|
576
612
|
}
|
|
577
613
|
installHydratedSessionDiff(expectedDiff) {
|
|
578
614
|
if (expectedDiff.isPartial) throw new Error("FileDiff.installHydratedSessionDiff: diffs cannot be partial for editing");
|
|
579
|
-
if (this.
|
|
615
|
+
if (this.getInputDiff() !== expectedDiff) return false;
|
|
580
616
|
if (this.editSession?.outgoingDiff != null) {
|
|
581
617
|
this.installEditSession(expectedDiff);
|
|
582
618
|
return true;
|
|
583
619
|
}
|
|
584
620
|
return false;
|
|
585
621
|
}
|
|
586
|
-
|
|
587
|
-
if (areDiffTargetsEqual(this.
|
|
588
|
-
const
|
|
589
|
-
this.fileDiff =
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
622
|
+
updateInputDiff(incomingDiff, lineAnnotations) {
|
|
623
|
+
if (areDiffTargetsEqual(this.getInputDiff(), incomingDiff)) return false;
|
|
624
|
+
const previousAnnotations = this.getLatestAnnotations();
|
|
625
|
+
this.fileDiff = incomingDiff;
|
|
626
|
+
const { editSession: previousSession } = this;
|
|
627
|
+
const outgoingDiff = previousSession?.outgoingDiff ?? previousSession?.diff;
|
|
628
|
+
if (previousSession != null) {
|
|
629
|
+
if (incomingDiff.isPartial) previousSession.inputDiff = incomingDiff;
|
|
630
|
+
else this.installEditSession(incomingDiff);
|
|
593
631
|
if (this.editSession != null) this.editSession.outgoingDiff = outgoingDiff;
|
|
594
632
|
}
|
|
595
|
-
if (this.editSession?.annotations != null && lineAnnotations != null)
|
|
596
|
-
|
|
597
|
-
this.editSession
|
|
598
|
-
|
|
633
|
+
if (this.editSession?.annotations != null && lineAnnotations != null) this.editSession.annotations = adoptEditSessionAnnotations(lineAnnotations, getLineAnnotationName, this.editSession.annotations);
|
|
634
|
+
this.pendingData = {
|
|
635
|
+
fileDiff: this.editSession?.diff ?? incomingDiff,
|
|
636
|
+
lineAnnotations: this.editSession?.annotations?.current ?? lineAnnotations ?? previousAnnotations
|
|
637
|
+
};
|
|
638
|
+
if (outgoingDiff != null && incomingDiff.isPartial) this.loadFilesIfNecessary();
|
|
599
639
|
return true;
|
|
600
640
|
}
|
|
601
|
-
installEditSession(
|
|
602
|
-
const
|
|
641
|
+
installEditSession(inputDiff, retainedDocument, retainedSession) {
|
|
642
|
+
const inputContents = inputDiff.additionLines.join("");
|
|
603
643
|
const retainedLines = retainedDocument != null ? splitFileContents(retainedDocument.contents) : void 0;
|
|
604
|
-
const restoreRetainedSession = retainedSession != null && canRestoreDiffSession(retainedSession,
|
|
644
|
+
const restoreRetainedSession = retainedSession != null && canRestoreDiffSession(retainedSession, inputDiff);
|
|
605
645
|
if (retainedSession != null && !restoreRetainedSession) throw new Error("FileDiff: retained session cannot resume against a different old file");
|
|
606
|
-
if (retainedDocument != null && retainedDocument.contents !==
|
|
607
|
-
const
|
|
608
|
-
const sessionDiff = createEditSessionDiff(
|
|
609
|
-
if (retainedDocument != null && retainedLines != null && !
|
|
646
|
+
if (retainedDocument != null && retainedDocument.contents !== inputContents && !restoreRetainedSession) throw new Error("FileDiff: retained edits are missing their diff session state");
|
|
647
|
+
const usesInputDocument = retainedDocument == null || retainedDocument.name === inputDiff.name && retainedDocument.lang === inputDiff.lang && retainedDocument.contents === inputContents;
|
|
648
|
+
const sessionDiff = createEditSessionDiff(inputDiff);
|
|
649
|
+
if (retainedDocument != null && retainedLines != null && !usesInputDocument) {
|
|
610
650
|
sessionDiff.name = retainedDocument.name;
|
|
611
651
|
sessionDiff.lang = retainedDocument.lang;
|
|
612
652
|
}
|
|
613
|
-
if (restoreRetainedSession && retainedSession != null && retainedLines != null) {
|
|
653
|
+
if (restoreRetainedSession && retainedSession != null && retainedDocument != null && retainedLines != null) {
|
|
614
654
|
sessionDiff.additionLines = retainedLines;
|
|
655
|
+
sessionDiff.additionCharacterCount = retainedDocument.contents.length;
|
|
615
656
|
sessionDiff.type = retainedSession.type;
|
|
616
657
|
sessionDiff.hunks = retainedSession.hunks;
|
|
617
658
|
sessionDiff.editSessionDirty = true;
|
|
618
659
|
recomputeDiffRenderLineCounts(sessionDiff);
|
|
619
660
|
}
|
|
661
|
+
const annotations = this.editSession?.annotations ?? adoptEditSessionAnnotations(this.getLatestAnnotations(), getLineAnnotationName);
|
|
620
662
|
this.editSession = {
|
|
621
663
|
diff: sessionDiff,
|
|
622
|
-
|
|
664
|
+
inputDiff,
|
|
665
|
+
annotations,
|
|
623
666
|
outgoingDiff: this.editSession?.outgoingDiff
|
|
624
667
|
};
|
|
625
|
-
this.
|
|
668
|
+
this.pendingData = {
|
|
669
|
+
fileDiff: sessionDiff,
|
|
670
|
+
lineAnnotations: annotations.current
|
|
671
|
+
};
|
|
672
|
+
this.hunksRenderer.beginEditSession(sessionDiff, usesInputDocument && !restoreRetainedSession ? inputDiff : void 0);
|
|
626
673
|
}
|
|
627
674
|
setHydratedState(files) {
|
|
628
675
|
this.deletionFile = files.oldFile;
|
|
@@ -632,6 +679,8 @@ var FileDiff = class {
|
|
|
632
679
|
}
|
|
633
680
|
render({ fileDiff, deferManagers = false, forceRender = false, preventEmit = false, lineAnnotations, fileContainer, containerWrapper, renderRange, ...fileInputProps }) {
|
|
634
681
|
if (!this.enabled) throw new Error("FileDiff.render: attempting to call render after cleaned up");
|
|
682
|
+
forceRender = this.forceRenderOverride ?? forceRender;
|
|
683
|
+
this.forceRenderOverride = void 0;
|
|
635
684
|
const fileInput = getDiffFileInput(fileInputProps, "FileDiff.render");
|
|
636
685
|
const oldFile = fileInput?.oldFile;
|
|
637
686
|
const newFile = fileInput?.newFile;
|
|
@@ -641,7 +690,7 @@ var FileDiff = class {
|
|
|
641
690
|
const themeChanged = this.hasThemeChanged();
|
|
642
691
|
const hasFileInput = fileInput != null;
|
|
643
692
|
const filesDidChange = hasFileInput && (!areOptionalFilesEqual(oldFile, this.deletionFile) || !areOptionalFilesEqual(newFile, this.additionFile));
|
|
644
|
-
let diffDidChange = fileDiff != null && !areDiffTargetsEqual(fileDiff, this.
|
|
693
|
+
let diffDidChange = fileDiff != null && !areDiffTargetsEqual(fileDiff, this.getInputDiff());
|
|
645
694
|
const annotationsChanged = lineAnnotations != null && (lineAnnotations.length > 0 || this.getLatestAnnotations().length > 0) ? this.isNewAnnotations(lineAnnotations) : false;
|
|
646
695
|
if (!collapsed && areRenderRangesEqual(nextRenderRange, this.renderRange) && !forceRender && !annotationsChanged && !themeChanged && (fileDiff != null && !diffDidChange || fileDiff == null && !filesDidChange)) {
|
|
647
696
|
const rendered = this.applyCachedThemeState(themeType);
|
|
@@ -649,7 +698,7 @@ var FileDiff = class {
|
|
|
649
698
|
return rendered;
|
|
650
699
|
}
|
|
651
700
|
let nextParsedFileDiff;
|
|
652
|
-
if (fileDiff == null && hasFileInput && (filesDidChange || this.
|
|
701
|
+
if (fileDiff == null && hasFileInput && (filesDidChange || this.getInputDiff() == null)) nextParsedFileDiff = parseDiffFromFile(fileInput.oldFile, fileInput.newFile, this.options.parseDiffOptions);
|
|
653
702
|
const { renderRange: previousRenderRange } = this;
|
|
654
703
|
this.renderRange = nextRenderRange;
|
|
655
704
|
if (hasFileInput) {
|
|
@@ -659,23 +708,23 @@ var FileDiff = class {
|
|
|
659
708
|
this.deletionFile = void 0;
|
|
660
709
|
this.additionFile = void 0;
|
|
661
710
|
}
|
|
662
|
-
if (fileDiff != null && diffDidChange) this.
|
|
711
|
+
if (fileDiff != null && diffDidChange) this.updateInputDiff(fileDiff, lineAnnotations);
|
|
663
712
|
else if (nextParsedFileDiff != null) {
|
|
664
713
|
diffDidChange = true;
|
|
665
|
-
this.
|
|
714
|
+
this.updateInputDiff(nextParsedFileDiff, lineAnnotations);
|
|
666
715
|
}
|
|
667
716
|
if (diffDidChange) this.clearReusableHeader();
|
|
668
717
|
if (lineAnnotations != null) this.setLineAnnotations(lineAnnotations);
|
|
669
|
-
const
|
|
670
|
-
if (
|
|
671
|
-
if (
|
|
672
|
-
finishEditSessionForDiff(
|
|
718
|
+
const workingDiff = this.getWorkingDiff();
|
|
719
|
+
if (workingDiff == null) return false;
|
|
720
|
+
if (workingDiff.editSessionDirty === true && this.shouldSelfHealEditSession()) {
|
|
721
|
+
finishEditSessionForDiff(workingDiff, this.options.parseDiffOptions);
|
|
673
722
|
this.hunksRenderer.refreshHighlightedResult();
|
|
674
723
|
}
|
|
675
724
|
if (expandUnchanged) this.loadFilesIfNecessary();
|
|
676
725
|
this.hunksRenderer.setOptions(this.getHunksRendererOptions(this.options));
|
|
677
726
|
this.syncInteractionOptions();
|
|
678
|
-
this.
|
|
727
|
+
this.prepareRenderData(this.hunksRenderer.getDiffForNextRender(workingDiff));
|
|
679
728
|
const { disableErrorHandling = false, disableFileHeader = false } = this.options;
|
|
680
729
|
if (disableFileHeader) {
|
|
681
730
|
if (this.headerElement != null) {
|
|
@@ -691,11 +740,11 @@ var FileDiff = class {
|
|
|
691
740
|
this.removeRenderedCode();
|
|
692
741
|
this.clearAuxiliaryNodes();
|
|
693
742
|
try {
|
|
694
|
-
const hunksResult = this.hunksRenderer.renderDiff(
|
|
743
|
+
const hunksResult = this.hunksRenderer.renderDiff(workingDiff, EMPTY_RENDER_RANGE);
|
|
695
744
|
if (hunksResult != null) this.applyThemeState(fileContainer, hunksResult.themeStyles, themeType, hunksResult.baseThemeType);
|
|
696
745
|
if (hunksResult?.headerElement != null) this.applyHeaderToDOM(hunksResult.headerElement, fileContainer, hunksResult.fileDiff);
|
|
697
746
|
this.renderSeparators([]);
|
|
698
|
-
this.
|
|
747
|
+
this.adoptRenderData(hunksResult?.fileDiff ?? workingDiff);
|
|
699
748
|
this.injectUnsafeCSS();
|
|
700
749
|
} catch (error) {
|
|
701
750
|
if (disableErrorHandling) throw error;
|
|
@@ -708,12 +757,12 @@ var FileDiff = class {
|
|
|
708
757
|
}
|
|
709
758
|
try {
|
|
710
759
|
const pre = this.getOrCreatePreNode(fileContainer);
|
|
711
|
-
if (!(this.canPartiallyRender(forceRender, annotationsChanged, filesDidChange || diffDidChange || themeChanged || !areDiffTargetsEqual(this.
|
|
712
|
-
fileDiff:
|
|
760
|
+
if (!(this.canPartiallyRender(forceRender, annotationsChanged, filesDidChange || diffDidChange || themeChanged || !areDiffTargetsEqual(this.getRenderedDiff(), workingDiff)) && this.applyPartialRender({
|
|
761
|
+
fileDiff: workingDiff,
|
|
713
762
|
previousRenderRange,
|
|
714
763
|
renderRange: nextRenderRange
|
|
715
764
|
}))) {
|
|
716
|
-
const hunksResult = this.hunksRenderer.renderDiff(
|
|
765
|
+
const hunksResult = this.hunksRenderer.renderDiff(workingDiff, nextRenderRange);
|
|
717
766
|
if (hunksResult == null) {
|
|
718
767
|
if (this.workerManager?.isInitialized() === false && this.workerManager.isWorkingPool()) this.workerManager.initialize().catch(() => {}).then(() => this.rerender());
|
|
719
768
|
return false;
|
|
@@ -726,7 +775,10 @@ var FileDiff = class {
|
|
|
726
775
|
this.pre = void 0;
|
|
727
776
|
}
|
|
728
777
|
this.renderSeparators(hunksResult.hunkData);
|
|
729
|
-
this.
|
|
778
|
+
this.adoptRenderData(hunksResult.fileDiff);
|
|
779
|
+
} else {
|
|
780
|
+
const renderedDiff = this.getRenderedDiff();
|
|
781
|
+
if (renderedDiff != null) this.adoptRenderData(renderedDiff);
|
|
730
782
|
}
|
|
731
783
|
this.applyBuffers(pre, nextRenderRange);
|
|
732
784
|
this.injectUnsafeCSS();
|
|
@@ -759,24 +811,56 @@ var FileDiff = class {
|
|
|
759
811
|
this.mounted = true;
|
|
760
812
|
onPostRender?.(fileContainer, this, phase);
|
|
761
813
|
}
|
|
762
|
-
|
|
763
|
-
return this.
|
|
814
|
+
getInputDiff() {
|
|
815
|
+
return this.fileDiff;
|
|
816
|
+
}
|
|
817
|
+
getWorkingDiff(fallbackDiff = this.fileDiff) {
|
|
818
|
+
return this.editSession?.diff ?? fallbackDiff;
|
|
764
819
|
}
|
|
765
820
|
getRenderedDiff() {
|
|
766
|
-
return this.
|
|
821
|
+
return this.renderedData?.fileDiff;
|
|
822
|
+
}
|
|
823
|
+
/**
|
|
824
|
+
* @internal Data the next render() with this input will display. While a
|
|
825
|
+
* replacement diff is being highlighted, this is still the displayed data.
|
|
826
|
+
*/
|
|
827
|
+
__getNextRenderData({ fileDiff, lineAnnotations }) {
|
|
828
|
+
const sessionAnnotations = this.editSession?.annotations;
|
|
829
|
+
if (sessionAnnotations != null) return {
|
|
830
|
+
fileDiff,
|
|
831
|
+
lineAnnotations: lineAnnotations != null && this.isNewAnnotations(lineAnnotations) ? lineAnnotations : sessionAnnotations.provided
|
|
832
|
+
};
|
|
833
|
+
const workingDiff = this.getWorkingDiff(fileDiff) ?? fileDiff;
|
|
834
|
+
const nextDiff = this.hunksRenderer.getDiffForNextRender(workingDiff);
|
|
835
|
+
return {
|
|
836
|
+
fileDiff: nextDiff,
|
|
837
|
+
lineAnnotations: lineAnnotations != null && areDiffTargetsEqual(nextDiff, workingDiff) ? lineAnnotations : this.getAnnotationsForDiff(nextDiff)
|
|
838
|
+
};
|
|
839
|
+
}
|
|
840
|
+
prepareRenderData(fileDiff) {
|
|
841
|
+
this.hunksRenderer.setLineAnnotations(this.getAnnotationsForDiff(fileDiff));
|
|
842
|
+
}
|
|
843
|
+
adoptRenderData(fileDiff) {
|
|
844
|
+
const { pendingData } = this;
|
|
845
|
+
const matchesPending = pendingData != null && areDiffTargetsEqual(fileDiff, pendingData.fileDiff);
|
|
846
|
+
this.renderedData = {
|
|
847
|
+
fileDiff,
|
|
848
|
+
lineAnnotations: matchesPending ? pendingData.lineAnnotations : this.lineAnnotations
|
|
849
|
+
};
|
|
850
|
+
if (matchesPending) this.pendingData = void 0;
|
|
767
851
|
}
|
|
768
852
|
syncRenderViewToEditor() {
|
|
769
853
|
const { editor, fileContainer } = this;
|
|
770
854
|
const lineAnnotations = this.getLatestAnnotations();
|
|
771
855
|
const renderRange = this.computeEditorRenderRange(this.renderRange);
|
|
772
|
-
const fileDiff = this.
|
|
856
|
+
const fileDiff = this.getWorkingDiff();
|
|
773
857
|
if (editor == null || fileContainer == null || fileDiff == null || fileDiff.isPartial) return;
|
|
774
858
|
const sync = (highlighter) => {
|
|
775
|
-
if (!this.enabled || this.editor !== editor || this.fileContainer !== fileContainer || this.
|
|
859
|
+
if (!this.enabled || this.editor !== editor || this.fileContainer !== fileContainer || this.getWorkingDiff() !== fileDiff) return;
|
|
776
860
|
const replacement = this.editSession?.outgoingDiff;
|
|
777
|
-
const
|
|
778
|
-
const externalDocument = replacement != null &&
|
|
779
|
-
const resetHistory = externalDocument && replacement != null &&
|
|
861
|
+
const inputDiff = this.getInputDiff();
|
|
862
|
+
const externalDocument = replacement != null && inputDiff != null && replacement !== fileDiff;
|
|
863
|
+
const resetHistory = externalDocument && replacement != null && inputDiff != null ? shouldResetUndoState(replacement, inputDiff) : false;
|
|
780
864
|
editor.__syncRenderView({
|
|
781
865
|
highlighter,
|
|
782
866
|
fileContainer,
|
|
@@ -797,11 +881,13 @@ var FileDiff = class {
|
|
|
797
881
|
else getSharedHighlighter({
|
|
798
882
|
themes: getThemes(theme),
|
|
799
883
|
langs: ["text", lang],
|
|
800
|
-
preferredHighlighter: this.workerManager
|
|
801
|
-
}).then(sync)
|
|
884
|
+
preferredHighlighter: resolvePreferredHighlighter(this.workerManager, this.options)
|
|
885
|
+
}).then(sync).catch((error) => {
|
|
886
|
+
if (!(error instanceof HighlighterDisposedError)) console.error(error);
|
|
887
|
+
});
|
|
802
888
|
}
|
|
803
889
|
computeEditorRenderRange(renderRange) {
|
|
804
|
-
const fileDiff = this.
|
|
890
|
+
const fileDiff = this.getWorkingDiff();
|
|
805
891
|
if (renderRange == null || fileDiff == null || isDefaultRenderRange(renderRange)) return renderRange;
|
|
806
892
|
const { diffStyle = "split", expandUnchanged = false, collapsedContextThreshold = 1 } = this.options;
|
|
807
893
|
let firstLineNumber;
|
|
@@ -851,7 +937,8 @@ var FileDiff = class {
|
|
|
851
937
|
* When `clone` is true, the returned lines and hunks are copied.
|
|
852
938
|
*/
|
|
853
939
|
__captureDocumentSessionState(clone = true) {
|
|
854
|
-
|
|
940
|
+
const fileDiff = this.getInputDiff();
|
|
941
|
+
let { diff: sessionDiff, outgoingDiff } = this.editSession ?? {};
|
|
855
942
|
if (outgoingDiff != null && fileDiff != null) {
|
|
856
943
|
if (!fileDiff.isPartial && shouldResetUndoState(outgoingDiff, fileDiff)) return;
|
|
857
944
|
sessionDiff = outgoingDiff;
|
|
@@ -892,17 +979,17 @@ var FileDiff = class {
|
|
|
892
979
|
this.resumeEditorRendering(editor);
|
|
893
980
|
}
|
|
894
981
|
resumeEditorRendering(editor) {
|
|
895
|
-
const
|
|
982
|
+
const inputDiff = this.getInputDiff();
|
|
896
983
|
const pendingReplacement = this.editSession?.outgoingDiff;
|
|
897
|
-
if (pendingReplacement != null &&
|
|
898
|
-
const
|
|
899
|
-
if (
|
|
984
|
+
if (pendingReplacement != null && inputDiff != null && !inputDiff.isPartial && this.editSession?.diff === pendingReplacement) this.installEditSession(inputDiff);
|
|
985
|
+
const initialInputDiff = this.editSession == null && inputDiff != null && !inputDiff.isPartial ? inputDiff : void 0;
|
|
986
|
+
if (initialInputDiff != null) this.installEditSession(initialInputDiff, editor.__getDocumentContents(getAdditionFile(initialInputDiff)), editor.__getDocumentSessionState());
|
|
900
987
|
else if (this.editSession != null) this.hunksRenderer.beginEditSession(this.editSession.diff);
|
|
901
988
|
this.editor = editor;
|
|
902
|
-
if (this.
|
|
989
|
+
if (this.getInputDiff()?.isPartial === true) this.loadFilesIfNecessary();
|
|
903
990
|
const editSessionDiff = this.editSession?.diff;
|
|
904
991
|
if (this.hunksRenderer.editorRenderReady()) {
|
|
905
|
-
if (editSessionDiff != null && this.hunksRenderer.diffCache === editSessionDiff) this.
|
|
992
|
+
if (editSessionDiff != null && this.hunksRenderer.diffCache === editSessionDiff) this.adoptRenderData(editSessionDiff);
|
|
906
993
|
this.syncRenderViewToEditor();
|
|
907
994
|
} else this.rerender();
|
|
908
995
|
}
|
|
@@ -917,7 +1004,7 @@ var FileDiff = class {
|
|
|
917
1004
|
* Requires the editor to be detached first. Does nothing when no session
|
|
918
1005
|
* exists, so callers can invoke it again safely after it has settled.
|
|
919
1006
|
*
|
|
920
|
-
* `onEditComplete` receives the completed diff, current
|
|
1007
|
+
* `onEditComplete` receives the completed diff, current input diff,
|
|
921
1008
|
* complete file pair, and both annotation collections even when the final
|
|
922
1009
|
* text is unchanged. In `install` mode, accepting installs the completed diff
|
|
923
1010
|
* and its annotations; rejecting or having no handler restores the external
|
|
@@ -928,9 +1015,10 @@ var FileDiff = class {
|
|
|
928
1015
|
this.settleEditSession(mode === "install", editor);
|
|
929
1016
|
}
|
|
930
1017
|
settleEditSession(installResult, editor) {
|
|
931
|
-
const { editSession
|
|
932
|
-
if (editSession == null
|
|
933
|
-
const { diff: editSessionDiff, annotations: editSessionAnnotations } = editSession;
|
|
1018
|
+
const { editSession } = this;
|
|
1019
|
+
if (editSession == null) return;
|
|
1020
|
+
const { diff: editSessionDiff, inputDiff, annotations: editSessionAnnotations } = editSession;
|
|
1021
|
+
const inputAnnotations = editSessionAnnotations?.provided ?? this.lineAnnotations;
|
|
934
1022
|
if (this.editor != null) throw new Error("FileDiff.__completeEditSession: detach the editor before completing the session");
|
|
935
1023
|
this.hunksRenderer.endEditSession();
|
|
936
1024
|
this.finalizeEditSessionHunks();
|
|
@@ -950,20 +1038,20 @@ var FileDiff = class {
|
|
|
950
1038
|
const event = {
|
|
951
1039
|
fileDiff: completedDiff,
|
|
952
1040
|
editor,
|
|
953
|
-
originalFileDiff:
|
|
1041
|
+
originalFileDiff: inputDiff,
|
|
954
1042
|
oldFile: completedDiff.type === "new" ? null : {
|
|
955
1043
|
name: completedDiff.prevName ?? completedDiff.name,
|
|
956
1044
|
contents: completedDiff.deletionLines.join("")
|
|
957
1045
|
},
|
|
958
1046
|
newFile,
|
|
959
1047
|
lineAnnotations: sessionAnnotationsCurrent,
|
|
960
|
-
originalLineAnnotations:
|
|
1048
|
+
originalLineAnnotations: inputAnnotations
|
|
961
1049
|
};
|
|
962
1050
|
Object.freeze(event);
|
|
963
1051
|
try {
|
|
964
1052
|
editor.__emitEditComplete(event);
|
|
965
1053
|
if (this.options.onEditComplete?.(event) === "accept") {
|
|
966
|
-
if (completedDiff.cacheKey != null && completedDiff.cacheKey ===
|
|
1054
|
+
if (completedDiff.cacheKey != null && completedDiff.cacheKey === inputDiff.cacheKey) throw new Error("FileDiff.__completeEditSession: an accepted diff must not reuse the replaced diff cacheKey");
|
|
967
1055
|
acceptedDiff = completedDiff;
|
|
968
1056
|
acceptedOldFile = event.oldFile;
|
|
969
1057
|
acceptedNewFile = event.newFile;
|
|
@@ -973,14 +1061,17 @@ var FileDiff = class {
|
|
|
973
1061
|
failure = error;
|
|
974
1062
|
}
|
|
975
1063
|
if (installResult && acceptedDiff != null) {
|
|
976
|
-
this.fileDiff = acceptedDiff;
|
|
977
1064
|
if (this.additionFile != null) {
|
|
978
1065
|
this.deletionFile = acceptedOldFile;
|
|
979
1066
|
this.additionFile = acceptedNewFile;
|
|
980
1067
|
}
|
|
981
|
-
if (sessionAnnotationsCurrent != null) this.lineAnnotations = sessionAnnotationsCurrent;
|
|
982
1068
|
}
|
|
983
1069
|
this.editSession = void 0;
|
|
1070
|
+
this.fileDiff = installResult && acceptedDiff != null ? acceptedDiff : inputDiff;
|
|
1071
|
+
this.pendingData = {
|
|
1072
|
+
fileDiff: this.fileDiff,
|
|
1073
|
+
lineAnnotations: installResult && acceptedDiff != null ? sessionAnnotationsCurrent ?? inputAnnotations : inputAnnotations
|
|
1074
|
+
};
|
|
984
1075
|
if (installResult && this.fileContainer != null) this.rerender();
|
|
985
1076
|
if (failed) throw failure;
|
|
986
1077
|
}
|
|
@@ -997,7 +1088,7 @@ var FileDiff = class {
|
|
|
997
1088
|
* ran.
|
|
998
1089
|
*/
|
|
999
1090
|
finalizeEditSessionHunks() {
|
|
1000
|
-
const fileDiff = this.
|
|
1091
|
+
const fileDiff = this.getWorkingDiff();
|
|
1001
1092
|
if (fileDiff == null || fileDiff.editSessionDirty !== true) return false;
|
|
1002
1093
|
const { collapsedContextThreshold = 1 } = this.options;
|
|
1003
1094
|
const anchors = captureExpansionAnchors(fileDiff, this.hunksRenderer.getExpandedHunksMap(), collapsedContextThreshold);
|
|
@@ -1049,9 +1140,8 @@ var FileDiff = class {
|
|
|
1049
1140
|
}
|
|
1050
1141
|
}
|
|
1051
1142
|
detachAdditionLines() {
|
|
1052
|
-
const editSessionDiff = this.editSession
|
|
1053
|
-
|
|
1054
|
-
if (editSessionDiff != null && (editSessionDiff.additionLines === fileDiff?.additionLines || editSessionDiff.additionLines === editSessionDiff.deletionLines)) editSessionDiff.additionLines = [...editSessionDiff.additionLines];
|
|
1143
|
+
const { diff: editSessionDiff, inputDiff } = this.editSession ?? {};
|
|
1144
|
+
if (editSessionDiff != null && (editSessionDiff.additionLines === inputDiff?.additionLines || editSessionDiff.additionLines === editSessionDiff.deletionLines)) editSessionDiff.additionLines = [...editSessionDiff.additionLines];
|
|
1055
1145
|
}
|
|
1056
1146
|
isLineRenderable(lineNumber) {
|
|
1057
1147
|
const fileDiff = this.getRenderedDiff();
|
|
@@ -1169,7 +1259,7 @@ var FileDiff = class {
|
|
|
1169
1259
|
this.placeHolder.style.setProperty("height", `${height}px`);
|
|
1170
1260
|
return true;
|
|
1171
1261
|
}
|
|
1172
|
-
async primeHighlightCache(fileDiff = this.
|
|
1262
|
+
async primeHighlightCache(fileDiff = this.getInputDiff()) {
|
|
1173
1263
|
const { workerManager } = this;
|
|
1174
1264
|
if (fileDiff == null || workerManager == null || !workerManager.isWorkingPool() || fileDiff.cacheKey == null || isDiffPlainText(fileDiff)) return;
|
|
1175
1265
|
const tokenizeMaxLength = this.options.tokenizeMaxLength ?? 1e5;
|
|
@@ -1223,7 +1313,7 @@ var FileDiff = class {
|
|
|
1223
1313
|
}
|
|
1224
1314
|
renderSeparators(hunkData) {
|
|
1225
1315
|
const { hunkSeparators } = this.options;
|
|
1226
|
-
if (this.
|
|
1316
|
+
if (this.isComponentManaged || this.fileContainer == null || typeof hunkSeparators !== "function") {
|
|
1227
1317
|
for (const { element } of this.separatorCache.values()) element.remove();
|
|
1228
1318
|
this.separatorCache.clear();
|
|
1229
1319
|
return;
|
|
@@ -1254,31 +1344,34 @@ var FileDiff = class {
|
|
|
1254
1344
|
}
|
|
1255
1345
|
}
|
|
1256
1346
|
renderAnnotations() {
|
|
1257
|
-
if (this.
|
|
1347
|
+
if (this.isComponentManaged || this.fileContainer == null) {
|
|
1258
1348
|
for (const { element } of this.annotationCache.values()) element.remove();
|
|
1259
1349
|
this.annotationCache.clear();
|
|
1260
1350
|
return;
|
|
1261
1351
|
}
|
|
1262
1352
|
const staleAnnotations = new Map(this.annotationCache);
|
|
1263
|
-
const { renderAnnotation } = this
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
const
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
cache
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1353
|
+
const { renderedData, options: { renderAnnotation } } = this;
|
|
1354
|
+
if (renderAnnotation != null && renderedData != null) {
|
|
1355
|
+
const { fileDiff, lineAnnotations } = renderedData;
|
|
1356
|
+
for (const [index, annotation] of lineAnnotations.entries()) {
|
|
1357
|
+
const name = this.getAnnotationSlotName(annotation);
|
|
1358
|
+
const id = `${index}-${name}`;
|
|
1359
|
+
let cache = this.annotationCache.get(id);
|
|
1360
|
+
if (cache == null || cache.fileDiff !== fileDiff || !areDiffLineAnnotationsEqual(annotation, cache.annotation)) {
|
|
1361
|
+
cache?.element.remove();
|
|
1362
|
+
const content = renderAnnotation(annotation, fileDiff);
|
|
1363
|
+
if (content == null) continue;
|
|
1364
|
+
cache = {
|
|
1365
|
+
element: createAnnotationWrapperNode(name),
|
|
1366
|
+
annotation,
|
|
1367
|
+
fileDiff
|
|
1368
|
+
};
|
|
1369
|
+
cache.element.appendChild(content);
|
|
1370
|
+
this.fileContainer.appendChild(cache.element);
|
|
1371
|
+
this.annotationCache.set(id, cache);
|
|
1372
|
+
}
|
|
1373
|
+
staleAnnotations.delete(id);
|
|
1280
1374
|
}
|
|
1281
|
-
staleAnnotations.delete(id);
|
|
1282
1375
|
}
|
|
1283
1376
|
for (const [id, { element }] of staleAnnotations.entries()) {
|
|
1284
1377
|
this.annotationCache.delete(id);
|
|
@@ -1376,7 +1469,7 @@ var FileDiff = class {
|
|
|
1376
1469
|
this.placeHolder?.remove();
|
|
1377
1470
|
this.placeHolder = void 0;
|
|
1378
1471
|
const { headerCache: { fileDiff: cachedHeaderDiff, html: cachedHeaderHTML, lastRenderedHTML } } = this;
|
|
1379
|
-
const headerHTML = (fileDiff !== this.editSession?.diff && areDiffTargetsEqual(cachedHeaderDiff, fileDiff) ? cachedHeaderHTML : void 0) ??
|
|
1472
|
+
const headerHTML = (fileDiff !== this.editSession?.diff && areDiffTargetsEqual(cachedHeaderDiff, fileDiff) ? cachedHeaderHTML : void 0) ?? hastToHtml(headerAST);
|
|
1380
1473
|
this.headerCache.html = headerHTML;
|
|
1381
1474
|
this.headerCache.fileDiff = fileDiff;
|
|
1382
1475
|
if (headerHTML !== lastRenderedHTML) {
|
|
@@ -1389,7 +1482,7 @@ var FileDiff = class {
|
|
|
1389
1482
|
this.headerElement = newHeader;
|
|
1390
1483
|
this.headerCache.lastRenderedHTML = headerHTML;
|
|
1391
1484
|
}
|
|
1392
|
-
if (this.
|
|
1485
|
+
if (this.isComponentManaged) return;
|
|
1393
1486
|
const { renderCustomHeader, renderHeaderPrefix, renderHeaderFilenameSuffix, renderHeaderMetadata } = this.options;
|
|
1394
1487
|
if (renderCustomHeader != null) {
|
|
1395
1488
|
const content = renderCustomHeader(fileDiff) ?? void 0;
|
|
@@ -1447,6 +1540,7 @@ var FileDiff = class {
|
|
|
1447
1540
|
}
|
|
1448
1541
|
injectUnsafeCSS() {
|
|
1449
1542
|
const { unsafeCSS } = this.options;
|
|
1543
|
+
this.pre?.toggleAttribute("data-custom-styles", Boolean(unsafeCSS));
|
|
1450
1544
|
const shadowRoot = this.fileContainer?.shadowRoot;
|
|
1451
1545
|
if (shadowRoot == null) return;
|
|
1452
1546
|
if (unsafeCSS == null || unsafeCSS === "") {
|
|
@@ -1515,8 +1609,8 @@ var FileDiff = class {
|
|
|
1515
1609
|
const gutterChildren = getElementChildren(ast[0]);
|
|
1516
1610
|
const contentChildren = getElementChildren(ast[1]);
|
|
1517
1611
|
if (gutterChildren == null || contentChildren == null) return false;
|
|
1518
|
-
columns.gutter.innerHTML =
|
|
1519
|
-
columns.content.innerHTML =
|
|
1612
|
+
columns.gutter.innerHTML = hastToHtml(gutterChildren);
|
|
1613
|
+
columns.content.innerHTML = hastToHtml(contentChildren);
|
|
1520
1614
|
if (rowCount !== this.lastRowCount) {
|
|
1521
1615
|
columns.gutter.style.setProperty("grid-row", `span ${rowCount}`);
|
|
1522
1616
|
columns.content.style.setProperty("grid-row", `span ${rowCount}`);
|
|
@@ -1639,7 +1733,7 @@ var FileDiff = class {
|
|
|
1639
1733
|
else if (diffStyle === "split" && Array.isArray(codeElements)) this.insertPartialHTML(diffStyle, codeElements, result, insertPosition);
|
|
1640
1734
|
else throw new Error("FileDiff.applyPartialRender.applyChunk: invalid chunk application");
|
|
1641
1735
|
rowCount += result.rowCount;
|
|
1642
|
-
this.
|
|
1736
|
+
this.adoptRenderData(result.fileDiff);
|
|
1643
1737
|
};
|
|
1644
1738
|
this.cleanupErrorWrapper();
|
|
1645
1739
|
applyChunk(prependResult, "afterbegin");
|
|
@@ -1662,7 +1756,7 @@ var FileDiff = class {
|
|
|
1662
1756
|
} else throw new Error("FileDiff.insertPartialHTML: Invalid argument composition");
|
|
1663
1757
|
}
|
|
1664
1758
|
refreshSplitDiffView() {
|
|
1665
|
-
const fileDiff = this.
|
|
1759
|
+
const fileDiff = this.getWorkingDiff();
|
|
1666
1760
|
if (this.options.diffStyle !== "split" || fileDiff == null) return;
|
|
1667
1761
|
const hunksResult = this.hunksRenderer.renderDiff(fileDiff, this.renderRange);
|
|
1668
1762
|
if (hunksResult == null) return;
|
|
@@ -1681,10 +1775,10 @@ var FileDiff = class {
|
|
|
1681
1775
|
};
|
|
1682
1776
|
applyLineType("deletions", columns[0]);
|
|
1683
1777
|
applyLineType("additions", columns[1]);
|
|
1684
|
-
this.
|
|
1778
|
+
this.adoptRenderData(hunksResult.fileDiff);
|
|
1685
1779
|
}
|
|
1686
1780
|
refreshUnifiedDiffView() {
|
|
1687
|
-
const fileDiff = this.
|
|
1781
|
+
const fileDiff = this.getWorkingDiff();
|
|
1688
1782
|
if (this.options.diffStyle !== "unified" || fileDiff == null) return;
|
|
1689
1783
|
const hunksResult = this.hunksRenderer.renderDiff(fileDiff, this.renderRange);
|
|
1690
1784
|
if (hunksResult == null) return;
|
|
@@ -1694,12 +1788,12 @@ var FileDiff = class {
|
|
|
1694
1788
|
const gutterChildren = getElementChildren(ast?.[0]);
|
|
1695
1789
|
const contentChildren = getElementChildren(ast?.[1]);
|
|
1696
1790
|
const applyColumns = () => {
|
|
1697
|
-
for (const [el, astChildren] of [[columns.gutter, gutterChildren], [columns.content, contentChildren]]) if (astChildren != null) el.innerHTML =
|
|
1791
|
+
for (const [el, astChildren] of [[columns.gutter, gutterChildren], [columns.content, contentChildren]]) if (astChildren != null) el.innerHTML = hastToHtml(astChildren);
|
|
1698
1792
|
if (hunksResult.rowCount !== this.lastRowCount) {
|
|
1699
1793
|
this.applyRowSpan("unified", columns, hunksResult.rowCount);
|
|
1700
1794
|
this.lastRowCount = hunksResult.rowCount;
|
|
1701
1795
|
}
|
|
1702
|
-
this.
|
|
1796
|
+
this.adoptRenderData(hunksResult.fileDiff);
|
|
1703
1797
|
};
|
|
1704
1798
|
if (this.shouldGuardRebuildScroll()) guardWebKitScrollDuringRebuild(this.pre, applyColumns);
|
|
1705
1799
|
else applyColumns();
|