@pierre/diffs 1.1.0-beta.1 → 1.1.0-beta.11
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 +7 -18
- package/dist/components/AdvancedVirtualizedFileDiff.d.ts +40 -0
- package/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +1 -0
- package/dist/components/AdvancedVirtualizedFileDiff.js +145 -0
- package/dist/components/AdvancedVirtualizedFileDiff.js.map +1 -0
- package/dist/components/AdvancedVirtualizer.d.ts +38 -0
- package/dist/components/AdvancedVirtualizer.d.ts.map +1 -0
- package/dist/components/AdvancedVirtualizer.js +201 -0
- package/dist/components/AdvancedVirtualizer.js.map +1 -0
- package/dist/components/File.d.ts +60 -29
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +226 -26
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +44 -12
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +510 -71
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/FileStream.d.ts +5 -0
- package/dist/components/FileStream.d.ts.map +1 -1
- package/dist/components/FileStream.js +66 -8
- package/dist/components/FileStream.js.map +1 -1
- package/dist/components/VirtualizedFile.d.ts +33 -0
- package/dist/components/VirtualizedFile.d.ts.map +1 -0
- package/dist/components/VirtualizedFile.js +227 -0
- package/dist/components/VirtualizedFile.js.map +1 -0
- package/dist/components/VirtualizedFileDiff.d.ts +39 -0
- package/dist/components/VirtualizedFileDiff.d.ts.map +1 -0
- package/dist/components/VirtualizedFileDiff.js +316 -0
- package/dist/components/VirtualizedFileDiff.js.map +1 -0
- package/dist/components/Virtualizer.d.ts +63 -0
- package/dist/components/Virtualizer.d.ts.map +1 -0
- package/dist/components/Virtualizer.js +369 -0
- package/dist/components/Virtualizer.js.map +1 -0
- package/dist/components/VirtulizerDevelopment.d.ts +14 -0
- package/dist/components/VirtulizerDevelopment.d.ts.map +1 -0
- package/dist/components/web-components.d.ts +1 -1
- package/dist/components/web-components.d.ts.map +1 -1
- package/dist/constants.d.ts +6 -8
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +16 -7
- package/dist/constants.js.map +1 -1
- package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/constants.d.ts +3 -1
- package/dist/highlighter/languages/constants.d.ts.map +1 -1
- package/dist/highlighter/languages/constants.js +2 -1
- package/dist/highlighter/languages/constants.js.map +1 -1
- package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
- package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/registerCustomLanguage.d.ts +19 -0
- package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -0
- package/dist/highlighter/languages/registerCustomLanguage.js +21 -0
- package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -0
- 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 +4 -3
- package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
- package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
- package/dist/highlighter/shared_highlighter.d.ts +4 -2
- package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
- package/dist/highlighter/shared_highlighter.js +3 -3
- package/dist/highlighter/shared_highlighter.js.map +1 -1
- package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/constants.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
- package/dist/index.d.ts +17 -12
- package/dist/index.js +14 -9
- package/dist/managers/LineSelectionManager.d.ts +14 -15
- package/dist/managers/LineSelectionManager.d.ts.map +1 -1
- package/dist/managers/LineSelectionManager.js +60 -71
- package/dist/managers/LineSelectionManager.js.map +1 -1
- package/dist/managers/MouseEventManager.d.ts +13 -6
- package/dist/managers/MouseEventManager.d.ts.map +1 -1
- package/dist/managers/MouseEventManager.js +161 -47
- package/dist/managers/MouseEventManager.js.map +1 -1
- package/dist/managers/ResizeManager.d.ts +6 -1
- package/dist/managers/ResizeManager.d.ts.map +1 -1
- package/dist/managers/ResizeManager.js +114 -64
- package/dist/managers/ResizeManager.js.map +1 -1
- package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
- package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
- package/dist/react/File.d.ts +1 -0
- package/dist/react/File.d.ts.map +1 -1
- package/dist/react/File.js +2 -1
- package/dist/react/File.js.map +1 -1
- package/dist/react/FileDiff.d.ts +1 -0
- package/dist/react/FileDiff.d.ts.map +1 -1
- package/dist/react/FileDiff.js +2 -1
- package/dist/react/FileDiff.js.map +1 -1
- package/dist/react/MultiFileDiff.d.ts +1 -0
- package/dist/react/MultiFileDiff.d.ts.map +1 -1
- package/dist/react/MultiFileDiff.js +2 -1
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/PatchDiff.d.ts +1 -0
- package/dist/react/PatchDiff.d.ts.map +1 -1
- package/dist/react/PatchDiff.js +3 -2
- package/dist/react/PatchDiff.js.map +1 -1
- package/dist/react/Virtualizer.d.ts +25 -0
- package/dist/react/Virtualizer.d.ts.map +1 -0
- package/dist/react/Virtualizer.js +38 -0
- package/dist/react/Virtualizer.js.map +1 -0
- package/dist/react/WorkerPoolContext.d.ts.map +1 -1
- package/dist/react/WorkerPoolContext.js +1 -1
- package/dist/react/WorkerPoolContext.js.map +1 -1
- package/dist/react/constants.d.ts.map +1 -1
- package/dist/react/index.d.ts +3 -2
- package/dist/react/index.js +2 -1
- package/dist/react/jsx.d.ts.map +1 -1
- package/dist/react/types.d.ts +5 -3
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.d.ts +5 -5
- package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
- package/dist/react/utils/renderFileChildren.d.ts +5 -5
- package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
- package/dist/react/utils/templateRender.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.d.ts +5 -3
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.js +6 -2
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/react/utils/useFileInstance.d.ts +5 -3
- package/dist/react/utils/useFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileInstance.js +6 -2
- package/dist/react/utils/useFileInstance.js.map +1 -1
- package/dist/react/utils/useStableCallback.d.ts.map +1 -1
- package/dist/react/utils/useStableCallback.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +15 -10
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +249 -140
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +12 -5
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +90 -31
- package/dist/renderers/FileRenderer.js.map +1 -1
- package/dist/shiki-stream/stream.d.ts +3 -3
- package/dist/shiki-stream/stream.d.ts.map +1 -1
- package/dist/shiki-stream/stream.js.map +1 -1
- package/dist/shiki-stream/tokenizer.d.ts +3 -3
- package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
- package/dist/shiki-stream/tokenizer.js.map +1 -1
- package/dist/shiki-stream/types.d.ts +19 -19
- package/dist/shiki-stream/types.d.ts.map +1 -1
- package/dist/sprite.d.ts +1 -1
- package/dist/sprite.d.ts.map +1 -1
- package/dist/ssr/FileDiffReact.d.ts.map +1 -1
- package/dist/ssr/FileDiffReact.js +1 -1
- package/dist/ssr/index.d.ts +2 -2
- package/dist/ssr/preloadDiffs.d.ts.map +1 -1
- package/dist/ssr/preloadFile.d.ts.map +1 -1
- package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
- package/dist/ssr/preloadPatchFile.js.map +1 -1
- package/dist/ssr/renderHTML.d.ts.map +1 -1
- package/dist/style.js +1 -1
- package/dist/style.js.map +1 -1
- package/dist/types.d.ts +200 -165
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
- package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
- package/dist/utils/areFilesEqual.d.ts.map +1 -1
- package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
- package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
- package/dist/utils/areObjectsEqual.d.ts.map +1 -1
- package/dist/utils/areOptionsEqual.d.ts +1 -1
- package/dist/utils/areOptionsEqual.d.ts.map +1 -1
- package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
- package/dist/utils/arePrePropertiesEqual.js +1 -1
- package/dist/utils/arePrePropertiesEqual.js.map +1 -1
- package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
- package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
- package/dist/utils/areThemesEqual.d.ts.map +1 -1
- package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
- package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
- package/dist/utils/cleanLastNewline.d.ts.map +1 -1
- package/dist/utils/createAnnotationElement.d.ts.map +1 -1
- package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
- package/dist/utils/createContentColumn.d.ts +7 -0
- package/dist/utils/createContentColumn.d.ts.map +1 -0
- package/dist/utils/createContentColumn.js +17 -0
- package/dist/utils/createContentColumn.js.map +1 -0
- package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
- package/dist/utils/createEmptyRowBuffer.js +2 -1
- package/dist/utils/createEmptyRowBuffer.js.map +1 -1
- package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
- package/dist/utils/createHoverContentNode.d.ts.map +1 -1
- package/dist/utils/createNoNewlineElement.d.ts +2 -1
- package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
- package/dist/utils/createNoNewlineElement.js +3 -6
- package/dist/utils/createNoNewlineElement.js.map +1 -1
- package/dist/utils/createPreElement.d.ts +2 -1
- package/dist/utils/createPreElement.d.ts.map +1 -1
- package/dist/utils/createPreElement.js +4 -3
- package/dist/utils/createPreElement.js.map +1 -1
- package/dist/utils/createRowNodes.d.ts.map +1 -1
- package/dist/utils/createSeparator.d.ts.map +1 -1
- package/dist/utils/createSeparator.js +2 -2
- package/dist/utils/createSeparator.js.map +1 -1
- package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
- package/dist/utils/createSpanNodeFromToken.js.map +1 -1
- package/dist/utils/createStyleElement.d.ts.map +1 -1
- package/dist/utils/createTransformerWithState.d.ts.map +1 -1
- package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
- package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
- package/dist/utils/cssWrappers.d.ts.map +1 -1
- package/dist/utils/diffAcceptRejectHunk.d.ts +1 -1
- package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
- package/dist/utils/formatCSSVariablePrefix.d.ts +1 -1
- package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
- package/dist/utils/getFiletypeFromFileName.d.ts +2 -1
- package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
- package/dist/utils/getFiletypeFromFileName.js +14 -4
- package/dist/utils/getFiletypeFromFileName.js.map +1 -1
- package/dist/utils/getHighlighterOptions.d.ts +7 -2
- 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.map +1 -1
- package/dist/utils/getHunkSeparatorSlotName.d.ts +3 -1
- package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
- package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
- package/dist/utils/getIconForType.d.ts +1 -1
- package/dist/utils/getIconForType.d.ts.map +1 -1
- package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
- package/dist/utils/getLineEndingType.d.ts +1 -1
- package/dist/utils/getLineEndingType.d.ts.map +1 -1
- package/dist/utils/getLineNodes.d.ts.map +1 -1
- package/dist/utils/getOrCreateCodeNode.d.ts +4 -2
- package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
- package/dist/utils/getOrCreateCodeNode.js +9 -6
- package/dist/utils/getOrCreateCodeNode.js.map +1 -1
- package/dist/utils/getSingularPatch.d.ts.map +1 -1
- package/dist/utils/getThemes.d.ts.map +1 -1
- package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
- package/dist/utils/hast_utils.d.ts +6 -3
- package/dist/utils/hast_utils.d.ts.map +1 -1
- package/dist/utils/hast_utils.js +28 -4
- package/dist/utils/hast_utils.js.map +1 -1
- package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
- package/dist/utils/isWorkerContext.d.ts.map +1 -1
- package/dist/utils/iterateOverDiff.d.ts +28 -13
- package/dist/utils/iterateOverDiff.d.ts.map +1 -1
- package/dist/utils/iterateOverDiff.js +101 -60
- package/dist/utils/iterateOverDiff.js.map +1 -1
- package/dist/utils/iterateOverFile.d.ts +50 -0
- package/dist/utils/iterateOverFile.d.ts.map +1 -0
- package/dist/utils/iterateOverFile.js +49 -0
- package/dist/utils/iterateOverFile.js.map +1 -0
- package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
- package/dist/utils/parseDiffFromFile.d.ts +6 -6
- package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
- package/dist/utils/parseDiffFromFile.js +3 -2
- package/dist/utils/parseDiffFromFile.js.map +1 -1
- package/dist/utils/parseLineType.d.ts +1 -1
- package/dist/utils/parseLineType.d.ts.map +1 -1
- package/dist/utils/parsePatchFiles.d.ts +12 -10
- package/dist/utils/parsePatchFiles.d.ts.map +1 -1
- package/dist/utils/parsePatchFiles.js +20 -11
- package/dist/utils/parsePatchFiles.js.map +1 -1
- package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
- package/dist/utils/processLine.d.ts.map +1 -1
- package/dist/utils/processLine.js +7 -24
- package/dist/utils/processLine.js.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.d.ts +4 -3
- package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.js +18 -16
- package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
- package/dist/utils/renderFileWithHighlighter.d.ts +7 -2
- package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderFileWithHighlighter.js +30 -4
- package/dist/utils/renderFileWithHighlighter.js.map +1 -1
- package/dist/utils/resolveVirtualFileMetrics.d.ts +7 -0
- package/dist/utils/resolveVirtualFileMetrics.d.ts.map +1 -0
- package/dist/utils/resolveVirtualFileMetrics.js +25 -0
- package/dist/utils/resolveVirtualFileMetrics.js.map +1 -0
- package/dist/utils/setLanguageOverride.d.ts +2 -1
- package/dist/utils/setLanguageOverride.d.ts.map +1 -1
- package/dist/utils/setLanguageOverride.js.map +1 -1
- package/dist/utils/setWrapperNodeProps.d.ts +1 -0
- package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
- package/dist/utils/setWrapperNodeProps.js +19 -12
- package/dist/utils/setWrapperNodeProps.js.map +1 -1
- package/dist/utils/splitFileContents.d.ts +12 -0
- package/dist/utils/splitFileContents.d.ts.map +1 -0
- package/dist/utils/splitFileContents.js +17 -0
- package/dist/utils/splitFileContents.js.map +1 -0
- package/dist/utils/trimPatchContext.d.ts +11 -0
- package/dist/utils/trimPatchContext.d.ts.map +1 -0
- package/dist/utils/trimPatchContext.js +99 -0
- package/dist/utils/trimPatchContext.js.map +1 -0
- package/dist/worker/WorkerPoolManager.d.ts +6 -4
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +47 -29
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
- package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
- package/dist/worker/types.d.ts +29 -27
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/wasm-BlUZCxHM.js +10 -0
- package/dist/worker/wasm-BlUZCxHM.js.map +1 -0
- package/dist/worker/worker-portable.js +10887 -10257
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +249 -132
- package/dist/worker/worker.js.map +1 -1
- package/package.json +50 -53
package/dist/worker/worker.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createHighlighterCore } from "shiki/core";
|
|
2
|
+
import { createJavaScriptRegexEngine } from "shiki/engine/javascript";
|
|
3
|
+
import { createOnigurumaEngine } from "shiki/engine/oniguruma";
|
|
3
4
|
import { diffChars, diffWordsWithSpace } from "diff";
|
|
4
5
|
import { transformerStyleToClass } from "@shikijs/transformers";
|
|
5
6
|
|
|
6
7
|
//#region src/constants.ts
|
|
8
|
+
const SPLIT_WITH_NEWLINES = /(?<=\n)/;
|
|
7
9
|
const DEFAULT_THEMES = {
|
|
8
10
|
dark: "pierre-dark",
|
|
9
11
|
light: "pierre-light"
|
|
10
12
|
};
|
|
13
|
+
const DEFAULT_COLLAPSED_CONTEXT_THRESHOLD = 1;
|
|
11
14
|
const DEFAULT_EXPANDED_REGION = Object.freeze({
|
|
12
15
|
fromStart: 0,
|
|
13
16
|
fromEnd: 0
|
|
@@ -73,14 +76,6 @@ function createTextNodeElement(value) {
|
|
|
73
76
|
value
|
|
74
77
|
};
|
|
75
78
|
}
|
|
76
|
-
function createHastElement({ tagName, children = [], properties = {} }) {
|
|
77
|
-
return {
|
|
78
|
-
type: "element",
|
|
79
|
-
tagName,
|
|
80
|
-
properties,
|
|
81
|
-
children
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
79
|
function findCodeElement(nodes) {
|
|
85
80
|
let firstChild = nodes.children[0];
|
|
86
81
|
while (firstChild != null) {
|
|
@@ -103,30 +98,13 @@ function processLine(node, line, state) {
|
|
|
103
98
|
});
|
|
104
99
|
throw new Error(errorMessage);
|
|
105
100
|
}
|
|
106
|
-
node.tagName = "
|
|
107
|
-
node.properties["data-
|
|
101
|
+
node.tagName = "div";
|
|
102
|
+
node.properties["data-line"] = lineInfo.lineNumber;
|
|
103
|
+
node.properties["data-alt-line"] = lineInfo.altLineNumber;
|
|
104
|
+
node.properties["data-line-type"] = lineInfo.type;
|
|
105
|
+
node.properties["data-line-index"] = lineInfo.lineIndex;
|
|
108
106
|
if (node.children.length === 0) node.children.push(createTextNodeElement("\n"));
|
|
109
|
-
return
|
|
110
|
-
tagName: "div",
|
|
111
|
-
children: [createHastElement({
|
|
112
|
-
tagName: "span",
|
|
113
|
-
children: [createHastElement({
|
|
114
|
-
tagName: "span",
|
|
115
|
-
children: [{
|
|
116
|
-
type: "text",
|
|
117
|
-
value: `${lineInfo.lineNumber}`
|
|
118
|
-
}],
|
|
119
|
-
properties: { "data-line-number-content": "" }
|
|
120
|
-
})],
|
|
121
|
-
properties: { "data-column-number": "" }
|
|
122
|
-
}), node],
|
|
123
|
-
properties: {
|
|
124
|
-
"data-line": lineInfo.lineNumber,
|
|
125
|
-
"data-alt-line": lineInfo.altLineNumber,
|
|
126
|
-
"data-line-type": lineInfo.type,
|
|
127
|
-
"data-line-index": lineInfo.lineIndex
|
|
128
|
-
}
|
|
129
|
-
});
|
|
107
|
+
return node;
|
|
130
108
|
}
|
|
131
109
|
|
|
132
110
|
//#endregion
|
|
@@ -187,6 +165,7 @@ function formatCSSVariablePrefix(type) {
|
|
|
187
165
|
|
|
188
166
|
//#endregion
|
|
189
167
|
//#region src/utils/getFiletypeFromFileName.ts
|
|
168
|
+
const CUSTOM_EXTENSION_TO_FILE_FORMAT = /* @__PURE__ */ new Map();
|
|
190
169
|
const EXTENSION_TO_FILE_FORMAT = {
|
|
191
170
|
"1c": "1c",
|
|
192
171
|
abap: "abap",
|
|
@@ -517,10 +496,16 @@ const EXTENSION_TO_FILE_FORMAT = {
|
|
|
517
496
|
sty: "tex"
|
|
518
497
|
};
|
|
519
498
|
function getFiletypeFromFileName(fileName) {
|
|
499
|
+
if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(fileName)) return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(fileName) ?? "text";
|
|
520
500
|
if (EXTENSION_TO_FILE_FORMAT[fileName] != null) return EXTENSION_TO_FILE_FORMAT[fileName];
|
|
521
501
|
const compoundMatch = fileName.match(/\.([^/\\]+\.[^/\\]+)$/);
|
|
522
|
-
if (compoundMatch != null
|
|
523
|
-
|
|
502
|
+
if (compoundMatch != null) {
|
|
503
|
+
if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(compoundMatch[1])) return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(compoundMatch[1]) ?? "text";
|
|
504
|
+
if (EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] != null) return EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] ?? "text";
|
|
505
|
+
}
|
|
506
|
+
const simpleMatch = fileName.match(/\.([^.]+)$/)?.[1] ?? "";
|
|
507
|
+
if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(simpleMatch)) return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(simpleMatch) ?? "text";
|
|
508
|
+
return EXTENSION_TO_FILE_FORMAT[simpleMatch] ?? "text";
|
|
524
509
|
}
|
|
525
510
|
|
|
526
511
|
//#endregion
|
|
@@ -573,7 +558,7 @@ function getLineNodes(nodes) {
|
|
|
573
558
|
|
|
574
559
|
//#endregion
|
|
575
560
|
//#region src/utils/iterateOverDiff.ts
|
|
576
|
-
function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infinity, expandedHunks, callback }) {
|
|
561
|
+
function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infinity, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD, callback }) {
|
|
577
562
|
const state = {
|
|
578
563
|
finalHunk: diff.hunks.at(-1),
|
|
579
564
|
viewportStart: startingLine,
|
|
@@ -624,14 +609,14 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
624
609
|
};
|
|
625
610
|
hunkIterator: for (const [hunkIndex, hunk] of diff.hunks.entries()) {
|
|
626
611
|
if (state.shouldBreak()) break;
|
|
627
|
-
const leadingRegion = getExpandedRegion(diff.isPartial, hunk.collapsedBefore, expandedHunks, hunkIndex);
|
|
612
|
+
const leadingRegion = getExpandedRegion(diff.isPartial, hunk.collapsedBefore, expandedHunks, hunkIndex, collapsedContextThreshold);
|
|
628
613
|
const trailingRegion = (() => {
|
|
629
614
|
if (hunk !== state.finalHunk || !hasFinalCollapsedHunk(diff)) return;
|
|
630
615
|
const additionRemaining = diff.additionLines.length - (hunk.additionLineIndex + hunk.additionCount);
|
|
631
616
|
const deletionRemaining = diff.deletionLines.length - (hunk.deletionLineIndex + hunk.deletionCount);
|
|
632
617
|
if (additionRemaining !== deletionRemaining) throw new Error(`iterateOverDiff: trailing context mismatch (additions=${additionRemaining}, deletions=${deletionRemaining}) for ${diff.name}`);
|
|
633
618
|
const trailingRangeSize = Math.min(additionRemaining, deletionRemaining);
|
|
634
|
-
return getExpandedRegion(diff.isPartial, trailingRangeSize, expandedHunks, diff.hunks.length);
|
|
619
|
+
return getExpandedRegion(diff.isPartial, trailingRangeSize, expandedHunks, diff.hunks.length, collapsedContextThreshold);
|
|
635
620
|
})();
|
|
636
621
|
const expandedLineCount = leadingRegion.fromStart + leadingRegion.fromEnd;
|
|
637
622
|
function getTrailingCollapsedAfter(unifiedLineIndex$1, splitLineIndex$1) {
|
|
@@ -660,16 +645,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
660
645
|
hunk,
|
|
661
646
|
collapsedBefore: 0,
|
|
662
647
|
collapsedAfter: 0,
|
|
663
|
-
unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
|
|
664
|
-
unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
|
|
665
|
-
splitLineIndex: splitLineIndex$1 + index,
|
|
666
|
-
deletionLineIndex: deletionLineIndex$1 + index,
|
|
667
|
-
additionLineIndex: additionLineIndex$1 + index,
|
|
668
|
-
deletionLineNumber: deletionLineNumber$1 + index,
|
|
669
|
-
additionLineNumber: additionLineNumber$1 + index,
|
|
670
648
|
type: "context-expanded",
|
|
671
|
-
|
|
672
|
-
|
|
649
|
+
deletionLine: {
|
|
650
|
+
lineNumber: deletionLineNumber$1 + index,
|
|
651
|
+
lineIndex: deletionLineIndex$1 + index,
|
|
652
|
+
noEOFCR: false,
|
|
653
|
+
unifiedLineIndex: unifiedLineIndex$1 + index,
|
|
654
|
+
splitLineIndex: splitLineIndex$1 + index
|
|
655
|
+
},
|
|
656
|
+
additionLine: {
|
|
657
|
+
unifiedLineIndex: unifiedLineIndex$1 + index,
|
|
658
|
+
splitLineIndex: splitLineIndex$1 + index,
|
|
659
|
+
lineIndex: additionLineIndex$1 + index,
|
|
660
|
+
lineNumber: additionLineNumber$1 + index,
|
|
661
|
+
noEOFCR: false
|
|
662
|
+
}
|
|
673
663
|
})) break hunkIterator;
|
|
674
664
|
} else state.incrementCounts(1, 1);
|
|
675
665
|
index++;
|
|
@@ -688,16 +678,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
688
678
|
hunk,
|
|
689
679
|
collapsedBefore: getPendingCollapsed(),
|
|
690
680
|
collapsedAfter: 0,
|
|
691
|
-
unifiedDeletionLineIndex: unifiedLineIndex$1 + index,
|
|
692
|
-
unifiedAdditionLineIndex: unifiedLineIndex$1 + index,
|
|
693
|
-
splitLineIndex: splitLineIndex$1 + index,
|
|
694
|
-
deletionLineIndex: deletionLineIndex$1 + index,
|
|
695
|
-
additionLineIndex: additionLineIndex$1 + index,
|
|
696
|
-
deletionLineNumber: deletionLineNumber$1 + index,
|
|
697
|
-
additionLineNumber: additionLineNumber$1 + index,
|
|
698
681
|
type: "context-expanded",
|
|
699
|
-
|
|
700
|
-
|
|
682
|
+
deletionLine: {
|
|
683
|
+
lineNumber: deletionLineNumber$1 + index,
|
|
684
|
+
lineIndex: deletionLineIndex$1 + index,
|
|
685
|
+
noEOFCR: false,
|
|
686
|
+
unifiedLineIndex: unifiedLineIndex$1 + index,
|
|
687
|
+
splitLineIndex: splitLineIndex$1 + index
|
|
688
|
+
},
|
|
689
|
+
additionLine: {
|
|
690
|
+
unifiedLineIndex: unifiedLineIndex$1 + index,
|
|
691
|
+
splitLineIndex: splitLineIndex$1 + index,
|
|
692
|
+
lineIndex: additionLineIndex$1 + index,
|
|
693
|
+
lineNumber: additionLineNumber$1 + index,
|
|
694
|
+
noEOFCR: false
|
|
695
|
+
}
|
|
701
696
|
})) break hunkIterator;
|
|
702
697
|
} else state.incrementCounts(1, 1);
|
|
703
698
|
index++;
|
|
@@ -729,16 +724,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
729
724
|
hunk,
|
|
730
725
|
collapsedBefore: getPendingCollapsed(),
|
|
731
726
|
collapsedAfter: getTrailingCollapsedAfter(unifiedRowIndex, splitRowIndex),
|
|
732
|
-
unifiedDeletionLineIndex: unifiedRowIndex,
|
|
733
|
-
unifiedAdditionLineIndex: unifiedRowIndex,
|
|
734
|
-
splitLineIndex: splitRowIndex,
|
|
735
|
-
deletionLineIndex: deletionLineIndex + index,
|
|
736
|
-
additionLineIndex: additionLineIndex + index,
|
|
737
|
-
deletionLineNumber: deletionLineNumber + index,
|
|
738
|
-
additionLineNumber: additionLineNumber + index,
|
|
739
727
|
type: "context",
|
|
740
|
-
|
|
741
|
-
|
|
728
|
+
deletionLine: {
|
|
729
|
+
lineNumber: deletionLineNumber + index,
|
|
730
|
+
lineIndex: deletionLineIndex + index,
|
|
731
|
+
noEOFCR: isLastLine && hunk.noEOFCRDeletions,
|
|
732
|
+
unifiedLineIndex: unifiedRowIndex,
|
|
733
|
+
splitLineIndex: splitRowIndex
|
|
734
|
+
},
|
|
735
|
+
additionLine: {
|
|
736
|
+
unifiedLineIndex: unifiedRowIndex,
|
|
737
|
+
splitLineIndex: splitRowIndex,
|
|
738
|
+
lineIndex: additionLineIndex + index,
|
|
739
|
+
lineNumber: additionLineNumber + index,
|
|
740
|
+
noEOFCR: isLastLine && hunk.noEOFCRAdditions
|
|
741
|
+
}
|
|
742
742
|
})) break hunkIterator;
|
|
743
743
|
} else state.incrementCounts(1, 1);
|
|
744
744
|
index++;
|
|
@@ -803,16 +803,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
803
803
|
hunk: void 0,
|
|
804
804
|
collapsedBefore: 0,
|
|
805
805
|
collapsedAfter: isLastLine ? collapsedLines : 0,
|
|
806
|
-
unifiedDeletionLineIndex: unifiedLineIndex + index,
|
|
807
|
-
unifiedAdditionLineIndex: unifiedLineIndex + index,
|
|
808
|
-
splitLineIndex: splitLineIndex + index,
|
|
809
|
-
additionLineIndex: additionLineIndex + index,
|
|
810
|
-
deletionLineIndex: deletionLineIndex + index,
|
|
811
|
-
additionLineNumber: additionLineNumber + index,
|
|
812
|
-
deletionLineNumber: deletionLineNumber + index,
|
|
813
806
|
type: "context-expanded",
|
|
814
|
-
|
|
815
|
-
|
|
807
|
+
deletionLine: {
|
|
808
|
+
lineNumber: deletionLineNumber + index,
|
|
809
|
+
lineIndex: deletionLineIndex + index,
|
|
810
|
+
noEOFCR: false,
|
|
811
|
+
unifiedLineIndex: unifiedLineIndex + index,
|
|
812
|
+
splitLineIndex: splitLineIndex + index
|
|
813
|
+
},
|
|
814
|
+
additionLine: {
|
|
815
|
+
unifiedLineIndex: unifiedLineIndex + index,
|
|
816
|
+
splitLineIndex: splitLineIndex + index,
|
|
817
|
+
lineIndex: additionLineIndex + index,
|
|
818
|
+
lineNumber: additionLineNumber + index,
|
|
819
|
+
noEOFCR: false
|
|
820
|
+
}
|
|
816
821
|
})) break hunkIterator;
|
|
817
822
|
} else state.incrementCounts(1, 1);
|
|
818
823
|
index++;
|
|
@@ -820,7 +825,7 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
820
825
|
}
|
|
821
826
|
}
|
|
822
827
|
}
|
|
823
|
-
function getExpandedRegion(isPartial, rangeSize, expandedHunks, hunkIndex) {
|
|
828
|
+
function getExpandedRegion(isPartial, rangeSize, expandedHunks, hunkIndex, collapsedContextThreshold) {
|
|
824
829
|
rangeSize = Math.max(rangeSize, 0);
|
|
825
830
|
if (rangeSize === 0 || isPartial) return {
|
|
826
831
|
fromStart: 0,
|
|
@@ -828,7 +833,7 @@ function getExpandedRegion(isPartial, rangeSize, expandedHunks, hunkIndex) {
|
|
|
828
833
|
rangeSize,
|
|
829
834
|
collapsedLines: Math.max(rangeSize, 0)
|
|
830
835
|
};
|
|
831
|
-
if (expandedHunks === true) return {
|
|
836
|
+
if (expandedHunks === true || rangeSize <= collapsedContextThreshold) return {
|
|
832
837
|
fromStart: rangeSize,
|
|
833
838
|
fromEnd: 0,
|
|
834
839
|
rangeSize,
|
|
@@ -891,37 +896,56 @@ function getChangeIterationRanges(state, content, diffStyle) {
|
|
|
891
896
|
return merged;
|
|
892
897
|
}
|
|
893
898
|
function getChangeLineData({ hunkIndex, hunk, collapsedAfter, collapsedBefore, diffStyle, index, unifiedLineIndex, splitLineIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, content, isLastContent, unifiedCount, splitCount }) {
|
|
894
|
-
|
|
899
|
+
const unifiedDeletionLineIndex = index < content.deletions ? unifiedLineIndex + index : void 0;
|
|
900
|
+
const unifiedAdditionLineIndex = diffStyle === "unified" ? index >= content.deletions ? unifiedLineIndex + index : void 0 : index < content.additions ? unifiedLineIndex + content.deletions + index : void 0;
|
|
901
|
+
const resolvedSplitLineIndex = diffStyle === "unified" ? splitLineIndex + (index < content.deletions ? index : index - content.deletions) : splitLineIndex + index;
|
|
902
|
+
const deletionLineIndexValue = index < content.deletions ? deletionLineIndex + index : void 0;
|
|
903
|
+
const deletionLineNumberValue = index < content.deletions ? deletionLineNumber + index : void 0;
|
|
904
|
+
const additionLineIndexValue = diffStyle === "unified" ? index >= content.deletions ? additionLineIndex + (index - content.deletions) : void 0 : index < content.additions ? additionLineIndex + index : void 0;
|
|
905
|
+
const additionLineNumberValue = diffStyle === "unified" ? index >= content.deletions ? additionLineNumber + (index - content.deletions) : void 0 : index < content.additions ? additionLineNumber + index : void 0;
|
|
906
|
+
const noEOFCRDeletion = diffStyle === "unified" ? isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions : isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions;
|
|
907
|
+
const noEOFCRAddition = diffStyle === "unified" ? isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions : isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions;
|
|
908
|
+
const deletionLine = deletionLineIndexValue != null && deletionLineNumberValue != null && unifiedDeletionLineIndex != null ? {
|
|
909
|
+
lineNumber: deletionLineNumberValue,
|
|
910
|
+
lineIndex: deletionLineIndexValue,
|
|
911
|
+
noEOFCR: noEOFCRDeletion,
|
|
912
|
+
unifiedLineIndex: unifiedDeletionLineIndex,
|
|
913
|
+
splitLineIndex: resolvedSplitLineIndex
|
|
914
|
+
} : void 0;
|
|
915
|
+
const additionLine = additionLineIndexValue != null && additionLineNumberValue != null && unifiedAdditionLineIndex != null ? {
|
|
916
|
+
unifiedLineIndex: unifiedAdditionLineIndex,
|
|
917
|
+
splitLineIndex: resolvedSplitLineIndex,
|
|
918
|
+
lineIndex: additionLineIndexValue,
|
|
919
|
+
lineNumber: additionLineNumberValue,
|
|
920
|
+
noEOFCR: noEOFCRAddition
|
|
921
|
+
} : void 0;
|
|
922
|
+
if (deletionLine == null && additionLine != null) return {
|
|
923
|
+
type: "change",
|
|
924
|
+
hunkIndex,
|
|
925
|
+
hunk,
|
|
926
|
+
collapsedAfter,
|
|
927
|
+
collapsedBefore,
|
|
928
|
+
deletionLine: void 0,
|
|
929
|
+
additionLine
|
|
930
|
+
};
|
|
931
|
+
else if (deletionLine != null && additionLine == null) return {
|
|
895
932
|
type: "change",
|
|
896
933
|
hunkIndex,
|
|
897
934
|
hunk,
|
|
898
935
|
collapsedAfter,
|
|
899
936
|
collapsedBefore,
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
splitLineIndex: splitLineIndex + (index < content.deletions ? index : index - content.deletions),
|
|
903
|
-
additionLineIndex: index >= content.deletions ? additionLineIndex + (index - content.deletions) : void 0,
|
|
904
|
-
additionLineNumber: index >= content.deletions ? additionLineNumber + (index - content.deletions) : void 0,
|
|
905
|
-
deletionLineIndex: index < content.deletions ? deletionLineIndex + index : void 0,
|
|
906
|
-
deletionLineNumber: index < content.deletions ? deletionLineNumber + index : void 0,
|
|
907
|
-
noEOFCRDeletion: isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions,
|
|
908
|
-
noEOFCRAddition: isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions
|
|
937
|
+
deletionLine,
|
|
938
|
+
additionLine: void 0
|
|
909
939
|
};
|
|
940
|
+
if (deletionLine == null || additionLine == null) throw new Error("iterateOverDiff: missing change line data");
|
|
910
941
|
return {
|
|
911
942
|
type: "change",
|
|
912
943
|
hunkIndex,
|
|
913
944
|
hunk,
|
|
914
945
|
collapsedAfter,
|
|
915
946
|
collapsedBefore,
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
splitLineIndex: splitLineIndex + index,
|
|
919
|
-
additionLineIndex: index < content.additions ? additionLineIndex + index : void 0,
|
|
920
|
-
additionLineNumber: index < content.additions ? additionLineNumber + index : void 0,
|
|
921
|
-
deletionLineIndex: index < content.deletions ? deletionLineIndex + index : void 0,
|
|
922
|
-
deletionLineNumber: index < content.deletions ? deletionLineNumber + index : void 0,
|
|
923
|
-
noEOFCRDeletion: isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions,
|
|
924
|
-
noEOFCRAddition: isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions
|
|
947
|
+
deletionLine,
|
|
948
|
+
additionLine
|
|
925
949
|
};
|
|
926
950
|
}
|
|
927
951
|
|
|
@@ -957,8 +981,8 @@ function pushOrJoinSpan({ item, arr, enableJoin, isNeutral = false, isLastItem =
|
|
|
957
981
|
|
|
958
982
|
//#endregion
|
|
959
983
|
//#region src/utils/renderDiffWithHighlighter.ts
|
|
960
|
-
const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
|
|
961
|
-
function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks } = DEFAULT_PLAIN_TEXT_OPTIONS) {
|
|
984
|
+
const DEFAULT_PLAIN_TEXT_OPTIONS$1 = { forcePlainText: false };
|
|
985
|
+
function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD } = DEFAULT_PLAIN_TEXT_OPTIONS$1) {
|
|
962
986
|
if (forcePlainText) {
|
|
963
987
|
startingLine ??= 0;
|
|
964
988
|
totalLines ??= Infinity;
|
|
@@ -1010,33 +1034,35 @@ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainTex
|
|
|
1010
1034
|
startingLine,
|
|
1011
1035
|
totalLines,
|
|
1012
1036
|
expandedHunks: isWindowedHighlight ? expandedHunksForIteration : true,
|
|
1013
|
-
|
|
1037
|
+
collapsedContextThreshold,
|
|
1038
|
+
callback: ({ hunkIndex, additionLine, deletionLine, type }) => {
|
|
1014
1039
|
const bucket = getBucketForHunk(hunkIndex);
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1040
|
+
const splitLineIndex = additionLine != null ? additionLine.splitLineIndex : deletionLine.splitLineIndex;
|
|
1041
|
+
if (type === "change" && additionLine != null && deletionLine != null) computeLineDiffDecorations({
|
|
1042
|
+
additionLine: diff.additionLines[additionLine.lineIndex],
|
|
1043
|
+
deletionLine: diff.deletionLines[deletionLine.lineIndex],
|
|
1018
1044
|
deletionLineIndex: bucket.deletionContent.length,
|
|
1019
1045
|
additionLineIndex: bucket.additionContent.length,
|
|
1020
1046
|
deletionDecorations: bucket.deletionDecorations,
|
|
1021
1047
|
additionDecorations: bucket.additionDecorations,
|
|
1022
1048
|
lineDiffType
|
|
1023
1049
|
});
|
|
1024
|
-
if (
|
|
1025
|
-
appendContent(diff.deletionLines[
|
|
1050
|
+
if (deletionLine != null) {
|
|
1051
|
+
appendContent(diff.deletionLines[deletionLine.lineIndex], deletionLine.lineIndex, bucket.deletionSegments, bucket.deletionContent);
|
|
1026
1052
|
bucket.deletionInfo.push({
|
|
1027
1053
|
type: type === "change" ? "change-deletion" : type,
|
|
1028
|
-
lineNumber:
|
|
1029
|
-
altLineNumber: type === "change" ? void 0 :
|
|
1030
|
-
lineIndex: `${
|
|
1054
|
+
lineNumber: deletionLine.lineNumber,
|
|
1055
|
+
altLineNumber: type === "change" ? void 0 : additionLine.lineNumber ?? void 0,
|
|
1056
|
+
lineIndex: `${deletionLine.unifiedLineIndex},${splitLineIndex}`
|
|
1031
1057
|
});
|
|
1032
1058
|
}
|
|
1033
|
-
if (
|
|
1034
|
-
appendContent(diff.additionLines[
|
|
1059
|
+
if (additionLine != null) {
|
|
1060
|
+
appendContent(diff.additionLines[additionLine.lineIndex], additionLine.lineIndex, bucket.additionSegments, bucket.additionContent);
|
|
1035
1061
|
bucket.additionInfo.push({
|
|
1036
1062
|
type: type === "change" ? "change-addition" : type,
|
|
1037
|
-
lineNumber:
|
|
1038
|
-
altLineNumber: type === "change" ? void 0 :
|
|
1039
|
-
lineIndex: `${
|
|
1063
|
+
lineNumber: additionLine.lineNumber,
|
|
1064
|
+
altLineNumber: type === "change" ? void 0 : deletionLine.lineNumber ?? void 0,
|
|
1065
|
+
lineIndex: `${additionLine.unifiedLineIndex},${splitLineIndex}`
|
|
1040
1066
|
});
|
|
1041
1067
|
}
|
|
1042
1068
|
}
|
|
@@ -1203,9 +1229,78 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
|
|
|
1203
1229
|
};
|
|
1204
1230
|
}
|
|
1205
1231
|
|
|
1232
|
+
//#endregion
|
|
1233
|
+
//#region src/utils/iterateOverFile.ts
|
|
1234
|
+
/**
|
|
1235
|
+
* Iterates over lines in a file with optional windowing support.
|
|
1236
|
+
*
|
|
1237
|
+
* Similar to `iterateOverDiff` but simplified for linear file content.
|
|
1238
|
+
* Supports viewport windowing for virtualization scenarios.
|
|
1239
|
+
*
|
|
1240
|
+
* @param props - Configuration for iteration
|
|
1241
|
+
* @param props.lines - Pre-split array of lines (use splitFileContents() to create from string)
|
|
1242
|
+
* @param props.startingLine - Optional starting line index (0-based, default: 0)
|
|
1243
|
+
* @param props.totalLines - Optional max lines to iterate (default: Infinity)
|
|
1244
|
+
* @param props.callback - Callback invoked for each line in the window.
|
|
1245
|
+
* Return `true` to stop iteration early.
|
|
1246
|
+
*
|
|
1247
|
+
* @example
|
|
1248
|
+
* ```typescript
|
|
1249
|
+
* const lines = splitFileContents('line1\nline2\nline3');
|
|
1250
|
+
* iterateOverFile({
|
|
1251
|
+
* lines,
|
|
1252
|
+
* startingLine: 0,
|
|
1253
|
+
* totalLines: 10,
|
|
1254
|
+
* callback: ({ lineIndex, lineNumber, content, isLastLine }) => {
|
|
1255
|
+
* console.log(`Line ${lineNumber}: ${content}`);
|
|
1256
|
+
* if (content.includes('stop')) return true; // Stop iteration
|
|
1257
|
+
* }
|
|
1258
|
+
* });
|
|
1259
|
+
* ```
|
|
1260
|
+
*/
|
|
1261
|
+
function iterateOverFile({ lines, startingLine = 0, totalLines = Infinity, callback }) {
|
|
1262
|
+
const len = Math.min(startingLine + totalLines, lines.length);
|
|
1263
|
+
const lastLineIndex = (() => {
|
|
1264
|
+
const lastLine = lines.at(-1);
|
|
1265
|
+
if (lastLine === "" || lastLine === "\n" || lastLine === "\r\n" || lastLine === "\r") return Math.max(0, lines.length - 2);
|
|
1266
|
+
return lines.length - 1;
|
|
1267
|
+
})();
|
|
1268
|
+
for (let lineIndex = startingLine; lineIndex < len; lineIndex++) {
|
|
1269
|
+
const isLastLine = lineIndex === lastLineIndex;
|
|
1270
|
+
if (callback({
|
|
1271
|
+
lineIndex,
|
|
1272
|
+
lineNumber: lineIndex + 1,
|
|
1273
|
+
content: lines[lineIndex],
|
|
1274
|
+
isLastLine
|
|
1275
|
+
}) === true || isLastLine) break;
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
//#endregion
|
|
1280
|
+
//#region src/utils/splitFileContents.ts
|
|
1281
|
+
/**
|
|
1282
|
+
* Splits file contents into lines using the same logic as diff parsing.
|
|
1283
|
+
* - Preserves trailing newlines on each line
|
|
1284
|
+
*
|
|
1285
|
+
* @param contents - The raw file contents string
|
|
1286
|
+
* @returns Array of lines with newlines preserved
|
|
1287
|
+
*/
|
|
1288
|
+
function splitFileContents(contents) {
|
|
1289
|
+
return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1206
1292
|
//#endregion
|
|
1207
1293
|
//#region src/utils/renderFileWithHighlighter.ts
|
|
1208
|
-
|
|
1294
|
+
const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
|
|
1295
|
+
function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES, tokenizeMaxLineLength }, { forcePlainText, startingLine, totalLines, lines } = DEFAULT_PLAIN_TEXT_OPTIONS) {
|
|
1296
|
+
if (forcePlainText) {
|
|
1297
|
+
startingLine ??= 0;
|
|
1298
|
+
totalLines ??= Infinity;
|
|
1299
|
+
} else {
|
|
1300
|
+
startingLine = 0;
|
|
1301
|
+
totalLines = Infinity;
|
|
1302
|
+
}
|
|
1303
|
+
const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;
|
|
1209
1304
|
const { state, transformers } = createTransformerWithState();
|
|
1210
1305
|
const lang = forcePlainText ? "text" : file.lang ?? getFiletypeFromFileName(file.name);
|
|
1211
1306
|
const baseThemeType = (() => {
|
|
@@ -1217,8 +1312,8 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
|
|
|
1217
1312
|
});
|
|
1218
1313
|
state.lineInfo = (shikiLineNumber) => ({
|
|
1219
1314
|
type: "context",
|
|
1220
|
-
lineIndex: shikiLineNumber - 1,
|
|
1221
|
-
lineNumber: shikiLineNumber
|
|
1315
|
+
lineIndex: shikiLineNumber - 1 + startingLine,
|
|
1316
|
+
lineNumber: shikiLineNumber + startingLine
|
|
1222
1317
|
});
|
|
1223
1318
|
const hastConfig = (() => {
|
|
1224
1319
|
if (typeof theme === "string") return {
|
|
@@ -1238,12 +1333,27 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
|
|
|
1238
1333
|
tokenizeMaxLineLength
|
|
1239
1334
|
};
|
|
1240
1335
|
})();
|
|
1336
|
+
const highlightedLines = getLineNodes(highlighter$1.codeToHast(isWindowedHighlight ? extractWindowedFileContent(lines ?? splitFileContents(file.contents), startingLine, totalLines) : cleanLastNewline(file.contents), hastConfig));
|
|
1337
|
+
const code = isWindowedHighlight ? new Array(startingLine) : highlightedLines;
|
|
1338
|
+
if (isWindowedHighlight) code.push(...highlightedLines);
|
|
1241
1339
|
return {
|
|
1242
|
-
code
|
|
1340
|
+
code,
|
|
1243
1341
|
themeStyles,
|
|
1244
1342
|
baseThemeType
|
|
1245
1343
|
};
|
|
1246
1344
|
}
|
|
1345
|
+
function extractWindowedFileContent(lines, startingLine, totalLines) {
|
|
1346
|
+
let windowContent = "";
|
|
1347
|
+
iterateOverFile({
|
|
1348
|
+
lines,
|
|
1349
|
+
startingLine,
|
|
1350
|
+
totalLines,
|
|
1351
|
+
callback({ content }) {
|
|
1352
|
+
windowContent += content;
|
|
1353
|
+
}
|
|
1354
|
+
});
|
|
1355
|
+
return windowContent;
|
|
1356
|
+
}
|
|
1247
1357
|
|
|
1248
1358
|
//#endregion
|
|
1249
1359
|
//#region src/worker/worker.ts
|
|
@@ -1257,20 +1367,22 @@ self.addEventListener("error", (event) => {
|
|
|
1257
1367
|
console.error("[Shiki Worker] Unhandled error:", event.error);
|
|
1258
1368
|
});
|
|
1259
1369
|
self.addEventListener("message", (event) => {
|
|
1260
|
-
|
|
1370
|
+
handleMessage(event.data);
|
|
1371
|
+
});
|
|
1372
|
+
async function handleMessage(request) {
|
|
1261
1373
|
try {
|
|
1262
1374
|
switch (request.type) {
|
|
1263
1375
|
case "initialize":
|
|
1264
|
-
handleInitialize(request);
|
|
1376
|
+
await handleInitialize(request);
|
|
1265
1377
|
break;
|
|
1266
1378
|
case "set-render-options":
|
|
1267
|
-
handleSetRenderOptions(request);
|
|
1379
|
+
await handleSetRenderOptions(request);
|
|
1268
1380
|
break;
|
|
1269
1381
|
case "file":
|
|
1270
|
-
handleRenderFile(request);
|
|
1382
|
+
await handleRenderFile(request);
|
|
1271
1383
|
break;
|
|
1272
1384
|
case "diff":
|
|
1273
|
-
handleRenderDiff(request);
|
|
1385
|
+
await handleRenderDiff(request);
|
|
1274
1386
|
break;
|
|
1275
1387
|
default: throw new Error(`Unknown request type: ${request.type}`);
|
|
1276
1388
|
}
|
|
@@ -1278,9 +1390,10 @@ self.addEventListener("message", (event) => {
|
|
|
1278
1390
|
console.error("Worker error:", error);
|
|
1279
1391
|
sendError(request.id, error);
|
|
1280
1392
|
}
|
|
1281
|
-
}
|
|
1282
|
-
function handleInitialize({ id, renderOptions: options, resolvedThemes, resolvedLanguages }) {
|
|
1283
|
-
|
|
1393
|
+
}
|
|
1394
|
+
async function handleInitialize({ id, renderOptions: options, preferredHighlighter, resolvedThemes, resolvedLanguages }) {
|
|
1395
|
+
let highlighter$1 = getHighlighter(preferredHighlighter);
|
|
1396
|
+
if ("then" in highlighter$1) highlighter$1 = await highlighter$1;
|
|
1284
1397
|
attachResolvedThemes(resolvedThemes, highlighter$1);
|
|
1285
1398
|
if (resolvedLanguages != null) attachResolvedLanguages(resolvedLanguages, highlighter$1);
|
|
1286
1399
|
renderOptions = options;
|
|
@@ -1291,8 +1404,10 @@ function handleInitialize({ id, renderOptions: options, resolvedThemes, resolved
|
|
|
1291
1404
|
sentAt: Date.now()
|
|
1292
1405
|
});
|
|
1293
1406
|
}
|
|
1294
|
-
function handleSetRenderOptions({ id, renderOptions: options, resolvedThemes }) {
|
|
1295
|
-
|
|
1407
|
+
async function handleSetRenderOptions({ id, renderOptions: options, resolvedThemes }) {
|
|
1408
|
+
let highlighter$1 = getHighlighter();
|
|
1409
|
+
if ("then" in highlighter$1) highlighter$1 = await highlighter$1;
|
|
1410
|
+
attachResolvedThemes(resolvedThemes, highlighter$1);
|
|
1296
1411
|
renderOptions = options;
|
|
1297
1412
|
postMessage({
|
|
1298
1413
|
type: "success",
|
|
@@ -1301,8 +1416,9 @@ function handleSetRenderOptions({ id, renderOptions: options, resolvedThemes })
|
|
|
1301
1416
|
sentAt: Date.now()
|
|
1302
1417
|
});
|
|
1303
1418
|
}
|
|
1304
|
-
function handleRenderFile({ id, file, resolvedLanguages }) {
|
|
1305
|
-
|
|
1419
|
+
async function handleRenderFile({ id, file, resolvedLanguages }) {
|
|
1420
|
+
let highlighter$1 = getHighlighter();
|
|
1421
|
+
if ("then" in highlighter$1) highlighter$1 = await highlighter$1;
|
|
1306
1422
|
if (resolvedLanguages != null) attachResolvedLanguages(resolvedLanguages, highlighter$1);
|
|
1307
1423
|
const fileOptions = {
|
|
1308
1424
|
theme: renderOptions.theme,
|
|
@@ -1310,16 +1426,17 @@ function handleRenderFile({ id, file, resolvedLanguages }) {
|
|
|
1310
1426
|
};
|
|
1311
1427
|
sendFileSuccess(id, renderFileWithHighlighter(file, highlighter$1, fileOptions), fileOptions);
|
|
1312
1428
|
}
|
|
1313
|
-
function handleRenderDiff({ id, diff, resolvedLanguages }) {
|
|
1314
|
-
|
|
1429
|
+
async function handleRenderDiff({ id, diff, resolvedLanguages }) {
|
|
1430
|
+
let highlighter$1 = getHighlighter();
|
|
1431
|
+
if ("then" in highlighter$1) highlighter$1 = await highlighter$1;
|
|
1315
1432
|
if (resolvedLanguages != null) attachResolvedLanguages(resolvedLanguages, highlighter$1);
|
|
1316
1433
|
sendDiffSuccess(id, renderDiffWithHighlighter(diff, highlighter$1, renderOptions), renderOptions);
|
|
1317
1434
|
}
|
|
1318
|
-
function getHighlighter() {
|
|
1319
|
-
highlighter ??=
|
|
1435
|
+
function getHighlighter(preferredHighlighter = "shiki-js") {
|
|
1436
|
+
highlighter ??= createHighlighterCore({
|
|
1320
1437
|
themes: [],
|
|
1321
1438
|
langs: [],
|
|
1322
|
-
engine: createJavaScriptRegexEngine()
|
|
1439
|
+
engine: preferredHighlighter === "shiki-wasm" ? createOnigurumaEngine(import("shiki/wasm")) : createJavaScriptRegexEngine()
|
|
1323
1440
|
});
|
|
1324
1441
|
return highlighter;
|
|
1325
1442
|
}
|