@pierre/diffs 1.1.0-beta.1 → 1.1.0-beta.10
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/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.map +1 -1
- 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 +2 -2
- 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 +2 -2
- 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 +18 -18
- 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 +198 -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.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 +3 -3
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +39 -26
- 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 +26 -26
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/worker-portable.js +352 -154
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +222 -113
- package/dist/worker/worker.js.map +1 -1
- package/package.json +52 -53
package/dist/worker/worker.js
CHANGED
|
@@ -4,10 +4,12 @@ import { diffChars, diffWordsWithSpace } from "diff";
|
|
|
4
4
|
import { transformerStyleToClass } from "@shikijs/transformers";
|
|
5
5
|
|
|
6
6
|
//#region src/constants.ts
|
|
7
|
+
const SPLIT_WITH_NEWLINES = /(?<=\n)/;
|
|
7
8
|
const DEFAULT_THEMES = {
|
|
8
9
|
dark: "pierre-dark",
|
|
9
10
|
light: "pierre-light"
|
|
10
11
|
};
|
|
12
|
+
const DEFAULT_COLLAPSED_CONTEXT_THRESHOLD = 1;
|
|
11
13
|
const DEFAULT_EXPANDED_REGION = Object.freeze({
|
|
12
14
|
fromStart: 0,
|
|
13
15
|
fromEnd: 0
|
|
@@ -73,14 +75,6 @@ function createTextNodeElement(value) {
|
|
|
73
75
|
value
|
|
74
76
|
};
|
|
75
77
|
}
|
|
76
|
-
function createHastElement({ tagName, children = [], properties = {} }) {
|
|
77
|
-
return {
|
|
78
|
-
type: "element",
|
|
79
|
-
tagName,
|
|
80
|
-
properties,
|
|
81
|
-
children
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
78
|
function findCodeElement(nodes) {
|
|
85
79
|
let firstChild = nodes.children[0];
|
|
86
80
|
while (firstChild != null) {
|
|
@@ -103,30 +97,13 @@ function processLine(node, line, state) {
|
|
|
103
97
|
});
|
|
104
98
|
throw new Error(errorMessage);
|
|
105
99
|
}
|
|
106
|
-
node.tagName = "
|
|
107
|
-
node.properties["data-
|
|
100
|
+
node.tagName = "div";
|
|
101
|
+
node.properties["data-line"] = lineInfo.lineNumber;
|
|
102
|
+
node.properties["data-alt-line"] = lineInfo.altLineNumber;
|
|
103
|
+
node.properties["data-line-type"] = lineInfo.type;
|
|
104
|
+
node.properties["data-line-index"] = lineInfo.lineIndex;
|
|
108
105
|
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
|
-
});
|
|
106
|
+
return node;
|
|
130
107
|
}
|
|
131
108
|
|
|
132
109
|
//#endregion
|
|
@@ -187,6 +164,7 @@ function formatCSSVariablePrefix(type) {
|
|
|
187
164
|
|
|
188
165
|
//#endregion
|
|
189
166
|
//#region src/utils/getFiletypeFromFileName.ts
|
|
167
|
+
const CUSTOM_EXTENSION_TO_FILE_FORMAT = /* @__PURE__ */ new Map();
|
|
190
168
|
const EXTENSION_TO_FILE_FORMAT = {
|
|
191
169
|
"1c": "1c",
|
|
192
170
|
abap: "abap",
|
|
@@ -517,10 +495,16 @@ const EXTENSION_TO_FILE_FORMAT = {
|
|
|
517
495
|
sty: "tex"
|
|
518
496
|
};
|
|
519
497
|
function getFiletypeFromFileName(fileName) {
|
|
498
|
+
if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(fileName)) return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(fileName) ?? "text";
|
|
520
499
|
if (EXTENSION_TO_FILE_FORMAT[fileName] != null) return EXTENSION_TO_FILE_FORMAT[fileName];
|
|
521
500
|
const compoundMatch = fileName.match(/\.([^/\\]+\.[^/\\]+)$/);
|
|
522
|
-
if (compoundMatch != null
|
|
523
|
-
|
|
501
|
+
if (compoundMatch != null) {
|
|
502
|
+
if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(compoundMatch[1])) return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(compoundMatch[1]) ?? "text";
|
|
503
|
+
if (EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] != null) return EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] ?? "text";
|
|
504
|
+
}
|
|
505
|
+
const simpleMatch = fileName.match(/\.([^.]+)$/)?.[1] ?? "";
|
|
506
|
+
if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(simpleMatch)) return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(simpleMatch) ?? "text";
|
|
507
|
+
return EXTENSION_TO_FILE_FORMAT[simpleMatch] ?? "text";
|
|
524
508
|
}
|
|
525
509
|
|
|
526
510
|
//#endregion
|
|
@@ -573,7 +557,7 @@ function getLineNodes(nodes) {
|
|
|
573
557
|
|
|
574
558
|
//#endregion
|
|
575
559
|
//#region src/utils/iterateOverDiff.ts
|
|
576
|
-
function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infinity, expandedHunks, callback }) {
|
|
560
|
+
function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infinity, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD, callback }) {
|
|
577
561
|
const state = {
|
|
578
562
|
finalHunk: diff.hunks.at(-1),
|
|
579
563
|
viewportStart: startingLine,
|
|
@@ -624,14 +608,14 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
624
608
|
};
|
|
625
609
|
hunkIterator: for (const [hunkIndex, hunk] of diff.hunks.entries()) {
|
|
626
610
|
if (state.shouldBreak()) break;
|
|
627
|
-
const leadingRegion = getExpandedRegion(diff.isPartial, hunk.collapsedBefore, expandedHunks, hunkIndex);
|
|
611
|
+
const leadingRegion = getExpandedRegion(diff.isPartial, hunk.collapsedBefore, expandedHunks, hunkIndex, collapsedContextThreshold);
|
|
628
612
|
const trailingRegion = (() => {
|
|
629
613
|
if (hunk !== state.finalHunk || !hasFinalCollapsedHunk(diff)) return;
|
|
630
614
|
const additionRemaining = diff.additionLines.length - (hunk.additionLineIndex + hunk.additionCount);
|
|
631
615
|
const deletionRemaining = diff.deletionLines.length - (hunk.deletionLineIndex + hunk.deletionCount);
|
|
632
616
|
if (additionRemaining !== deletionRemaining) throw new Error(`iterateOverDiff: trailing context mismatch (additions=${additionRemaining}, deletions=${deletionRemaining}) for ${diff.name}`);
|
|
633
617
|
const trailingRangeSize = Math.min(additionRemaining, deletionRemaining);
|
|
634
|
-
return getExpandedRegion(diff.isPartial, trailingRangeSize, expandedHunks, diff.hunks.length);
|
|
618
|
+
return getExpandedRegion(diff.isPartial, trailingRangeSize, expandedHunks, diff.hunks.length, collapsedContextThreshold);
|
|
635
619
|
})();
|
|
636
620
|
const expandedLineCount = leadingRegion.fromStart + leadingRegion.fromEnd;
|
|
637
621
|
function getTrailingCollapsedAfter(unifiedLineIndex$1, splitLineIndex$1) {
|
|
@@ -660,16 +644,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
660
644
|
hunk,
|
|
661
645
|
collapsedBefore: 0,
|
|
662
646
|
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
647
|
type: "context-expanded",
|
|
671
|
-
|
|
672
|
-
|
|
648
|
+
deletionLine: {
|
|
649
|
+
lineNumber: deletionLineNumber$1 + index,
|
|
650
|
+
lineIndex: deletionLineIndex$1 + index,
|
|
651
|
+
noEOFCR: false,
|
|
652
|
+
unifiedLineIndex: unifiedLineIndex$1 + index,
|
|
653
|
+
splitLineIndex: splitLineIndex$1 + index
|
|
654
|
+
},
|
|
655
|
+
additionLine: {
|
|
656
|
+
unifiedLineIndex: unifiedLineIndex$1 + index,
|
|
657
|
+
splitLineIndex: splitLineIndex$1 + index,
|
|
658
|
+
lineIndex: additionLineIndex$1 + index,
|
|
659
|
+
lineNumber: additionLineNumber$1 + index,
|
|
660
|
+
noEOFCR: false
|
|
661
|
+
}
|
|
673
662
|
})) break hunkIterator;
|
|
674
663
|
} else state.incrementCounts(1, 1);
|
|
675
664
|
index++;
|
|
@@ -688,16 +677,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
688
677
|
hunk,
|
|
689
678
|
collapsedBefore: getPendingCollapsed(),
|
|
690
679
|
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
680
|
type: "context-expanded",
|
|
699
|
-
|
|
700
|
-
|
|
681
|
+
deletionLine: {
|
|
682
|
+
lineNumber: deletionLineNumber$1 + index,
|
|
683
|
+
lineIndex: deletionLineIndex$1 + index,
|
|
684
|
+
noEOFCR: false,
|
|
685
|
+
unifiedLineIndex: unifiedLineIndex$1 + index,
|
|
686
|
+
splitLineIndex: splitLineIndex$1 + index
|
|
687
|
+
},
|
|
688
|
+
additionLine: {
|
|
689
|
+
unifiedLineIndex: unifiedLineIndex$1 + index,
|
|
690
|
+
splitLineIndex: splitLineIndex$1 + index,
|
|
691
|
+
lineIndex: additionLineIndex$1 + index,
|
|
692
|
+
lineNumber: additionLineNumber$1 + index,
|
|
693
|
+
noEOFCR: false
|
|
694
|
+
}
|
|
701
695
|
})) break hunkIterator;
|
|
702
696
|
} else state.incrementCounts(1, 1);
|
|
703
697
|
index++;
|
|
@@ -729,16 +723,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
729
723
|
hunk,
|
|
730
724
|
collapsedBefore: getPendingCollapsed(),
|
|
731
725
|
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
726
|
type: "context",
|
|
740
|
-
|
|
741
|
-
|
|
727
|
+
deletionLine: {
|
|
728
|
+
lineNumber: deletionLineNumber + index,
|
|
729
|
+
lineIndex: deletionLineIndex + index,
|
|
730
|
+
noEOFCR: isLastLine && hunk.noEOFCRDeletions,
|
|
731
|
+
unifiedLineIndex: unifiedRowIndex,
|
|
732
|
+
splitLineIndex: splitRowIndex
|
|
733
|
+
},
|
|
734
|
+
additionLine: {
|
|
735
|
+
unifiedLineIndex: unifiedRowIndex,
|
|
736
|
+
splitLineIndex: splitRowIndex,
|
|
737
|
+
lineIndex: additionLineIndex + index,
|
|
738
|
+
lineNumber: additionLineNumber + index,
|
|
739
|
+
noEOFCR: isLastLine && hunk.noEOFCRAdditions
|
|
740
|
+
}
|
|
742
741
|
})) break hunkIterator;
|
|
743
742
|
} else state.incrementCounts(1, 1);
|
|
744
743
|
index++;
|
|
@@ -803,16 +802,21 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
803
802
|
hunk: void 0,
|
|
804
803
|
collapsedBefore: 0,
|
|
805
804
|
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
805
|
type: "context-expanded",
|
|
814
|
-
|
|
815
|
-
|
|
806
|
+
deletionLine: {
|
|
807
|
+
lineNumber: deletionLineNumber + index,
|
|
808
|
+
lineIndex: deletionLineIndex + index,
|
|
809
|
+
noEOFCR: false,
|
|
810
|
+
unifiedLineIndex: unifiedLineIndex + index,
|
|
811
|
+
splitLineIndex: splitLineIndex + index
|
|
812
|
+
},
|
|
813
|
+
additionLine: {
|
|
814
|
+
unifiedLineIndex: unifiedLineIndex + index,
|
|
815
|
+
splitLineIndex: splitLineIndex + index,
|
|
816
|
+
lineIndex: additionLineIndex + index,
|
|
817
|
+
lineNumber: additionLineNumber + index,
|
|
818
|
+
noEOFCR: false
|
|
819
|
+
}
|
|
816
820
|
})) break hunkIterator;
|
|
817
821
|
} else state.incrementCounts(1, 1);
|
|
818
822
|
index++;
|
|
@@ -820,7 +824,7 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
|
|
|
820
824
|
}
|
|
821
825
|
}
|
|
822
826
|
}
|
|
823
|
-
function getExpandedRegion(isPartial, rangeSize, expandedHunks, hunkIndex) {
|
|
827
|
+
function getExpandedRegion(isPartial, rangeSize, expandedHunks, hunkIndex, collapsedContextThreshold) {
|
|
824
828
|
rangeSize = Math.max(rangeSize, 0);
|
|
825
829
|
if (rangeSize === 0 || isPartial) return {
|
|
826
830
|
fromStart: 0,
|
|
@@ -828,7 +832,7 @@ function getExpandedRegion(isPartial, rangeSize, expandedHunks, hunkIndex) {
|
|
|
828
832
|
rangeSize,
|
|
829
833
|
collapsedLines: Math.max(rangeSize, 0)
|
|
830
834
|
};
|
|
831
|
-
if (expandedHunks === true) return {
|
|
835
|
+
if (expandedHunks === true || rangeSize <= collapsedContextThreshold) return {
|
|
832
836
|
fromStart: rangeSize,
|
|
833
837
|
fromEnd: 0,
|
|
834
838
|
rangeSize,
|
|
@@ -891,37 +895,56 @@ function getChangeIterationRanges(state, content, diffStyle) {
|
|
|
891
895
|
return merged;
|
|
892
896
|
}
|
|
893
897
|
function getChangeLineData({ hunkIndex, hunk, collapsedAfter, collapsedBefore, diffStyle, index, unifiedLineIndex, splitLineIndex, additionLineIndex, deletionLineIndex, additionLineNumber, deletionLineNumber, content, isLastContent, unifiedCount, splitCount }) {
|
|
894
|
-
|
|
898
|
+
const unifiedDeletionLineIndex = index < content.deletions ? unifiedLineIndex + index : void 0;
|
|
899
|
+
const unifiedAdditionLineIndex = diffStyle === "unified" ? index >= content.deletions ? unifiedLineIndex + index : void 0 : index < content.additions ? unifiedLineIndex + content.deletions + index : void 0;
|
|
900
|
+
const resolvedSplitLineIndex = diffStyle === "unified" ? splitLineIndex + (index < content.deletions ? index : index - content.deletions) : splitLineIndex + index;
|
|
901
|
+
const deletionLineIndexValue = index < content.deletions ? deletionLineIndex + index : void 0;
|
|
902
|
+
const deletionLineNumberValue = index < content.deletions ? deletionLineNumber + index : void 0;
|
|
903
|
+
const additionLineIndexValue = diffStyle === "unified" ? index >= content.deletions ? additionLineIndex + (index - content.deletions) : void 0 : index < content.additions ? additionLineIndex + index : void 0;
|
|
904
|
+
const additionLineNumberValue = diffStyle === "unified" ? index >= content.deletions ? additionLineNumber + (index - content.deletions) : void 0 : index < content.additions ? additionLineNumber + index : void 0;
|
|
905
|
+
const noEOFCRDeletion = diffStyle === "unified" ? isLastContent && index === content.deletions - 1 && hunk.noEOFCRDeletions : isLastContent && index === splitCount - 1 && hunk.noEOFCRDeletions;
|
|
906
|
+
const noEOFCRAddition = diffStyle === "unified" ? isLastContent && index === unifiedCount - 1 && hunk.noEOFCRAdditions : isLastContent && index === splitCount - 1 && hunk.noEOFCRAdditions;
|
|
907
|
+
const deletionLine = deletionLineIndexValue != null && deletionLineNumberValue != null && unifiedDeletionLineIndex != null ? {
|
|
908
|
+
lineNumber: deletionLineNumberValue,
|
|
909
|
+
lineIndex: deletionLineIndexValue,
|
|
910
|
+
noEOFCR: noEOFCRDeletion,
|
|
911
|
+
unifiedLineIndex: unifiedDeletionLineIndex,
|
|
912
|
+
splitLineIndex: resolvedSplitLineIndex
|
|
913
|
+
} : void 0;
|
|
914
|
+
const additionLine = additionLineIndexValue != null && additionLineNumberValue != null && unifiedAdditionLineIndex != null ? {
|
|
915
|
+
unifiedLineIndex: unifiedAdditionLineIndex,
|
|
916
|
+
splitLineIndex: resolvedSplitLineIndex,
|
|
917
|
+
lineIndex: additionLineIndexValue,
|
|
918
|
+
lineNumber: additionLineNumberValue,
|
|
919
|
+
noEOFCR: noEOFCRAddition
|
|
920
|
+
} : void 0;
|
|
921
|
+
if (deletionLine == null && additionLine != null) return {
|
|
922
|
+
type: "change",
|
|
923
|
+
hunkIndex,
|
|
924
|
+
hunk,
|
|
925
|
+
collapsedAfter,
|
|
926
|
+
collapsedBefore,
|
|
927
|
+
deletionLine: void 0,
|
|
928
|
+
additionLine
|
|
929
|
+
};
|
|
930
|
+
else if (deletionLine != null && additionLine == null) return {
|
|
895
931
|
type: "change",
|
|
896
932
|
hunkIndex,
|
|
897
933
|
hunk,
|
|
898
934
|
collapsedAfter,
|
|
899
935
|
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
|
|
936
|
+
deletionLine,
|
|
937
|
+
additionLine: void 0
|
|
909
938
|
};
|
|
939
|
+
if (deletionLine == null || additionLine == null) throw new Error("iterateOverDiff: missing change line data");
|
|
910
940
|
return {
|
|
911
941
|
type: "change",
|
|
912
942
|
hunkIndex,
|
|
913
943
|
hunk,
|
|
914
944
|
collapsedAfter,
|
|
915
945
|
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
|
|
946
|
+
deletionLine,
|
|
947
|
+
additionLine
|
|
925
948
|
};
|
|
926
949
|
}
|
|
927
950
|
|
|
@@ -957,8 +980,8 @@ function pushOrJoinSpan({ item, arr, enableJoin, isNeutral = false, isLastItem =
|
|
|
957
980
|
|
|
958
981
|
//#endregion
|
|
959
982
|
//#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) {
|
|
983
|
+
const DEFAULT_PLAIN_TEXT_OPTIONS$1 = { forcePlainText: false };
|
|
984
|
+
function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainText, startingLine, totalLines, expandedHunks, collapsedContextThreshold = DEFAULT_COLLAPSED_CONTEXT_THRESHOLD } = DEFAULT_PLAIN_TEXT_OPTIONS$1) {
|
|
962
985
|
if (forcePlainText) {
|
|
963
986
|
startingLine ??= 0;
|
|
964
987
|
totalLines ??= Infinity;
|
|
@@ -1010,33 +1033,35 @@ function renderDiffWithHighlighter(diff, highlighter$1, options, { forcePlainTex
|
|
|
1010
1033
|
startingLine,
|
|
1011
1034
|
totalLines,
|
|
1012
1035
|
expandedHunks: isWindowedHighlight ? expandedHunksForIteration : true,
|
|
1013
|
-
|
|
1036
|
+
collapsedContextThreshold,
|
|
1037
|
+
callback: ({ hunkIndex, additionLine, deletionLine, type }) => {
|
|
1014
1038
|
const bucket = getBucketForHunk(hunkIndex);
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1039
|
+
const splitLineIndex = additionLine != null ? additionLine.splitLineIndex : deletionLine.splitLineIndex;
|
|
1040
|
+
if (type === "change" && additionLine != null && deletionLine != null) computeLineDiffDecorations({
|
|
1041
|
+
additionLine: diff.additionLines[additionLine.lineIndex],
|
|
1042
|
+
deletionLine: diff.deletionLines[deletionLine.lineIndex],
|
|
1018
1043
|
deletionLineIndex: bucket.deletionContent.length,
|
|
1019
1044
|
additionLineIndex: bucket.additionContent.length,
|
|
1020
1045
|
deletionDecorations: bucket.deletionDecorations,
|
|
1021
1046
|
additionDecorations: bucket.additionDecorations,
|
|
1022
1047
|
lineDiffType
|
|
1023
1048
|
});
|
|
1024
|
-
if (
|
|
1025
|
-
appendContent(diff.deletionLines[
|
|
1049
|
+
if (deletionLine != null) {
|
|
1050
|
+
appendContent(diff.deletionLines[deletionLine.lineIndex], deletionLine.lineIndex, bucket.deletionSegments, bucket.deletionContent);
|
|
1026
1051
|
bucket.deletionInfo.push({
|
|
1027
1052
|
type: type === "change" ? "change-deletion" : type,
|
|
1028
|
-
lineNumber:
|
|
1029
|
-
altLineNumber: type === "change" ? void 0 :
|
|
1030
|
-
lineIndex: `${
|
|
1053
|
+
lineNumber: deletionLine.lineNumber,
|
|
1054
|
+
altLineNumber: type === "change" ? void 0 : additionLine.lineNumber ?? void 0,
|
|
1055
|
+
lineIndex: `${deletionLine.unifiedLineIndex},${splitLineIndex}`
|
|
1031
1056
|
});
|
|
1032
1057
|
}
|
|
1033
|
-
if (
|
|
1034
|
-
appendContent(diff.additionLines[
|
|
1058
|
+
if (additionLine != null) {
|
|
1059
|
+
appendContent(diff.additionLines[additionLine.lineIndex], additionLine.lineIndex, bucket.additionSegments, bucket.additionContent);
|
|
1035
1060
|
bucket.additionInfo.push({
|
|
1036
1061
|
type: type === "change" ? "change-addition" : type,
|
|
1037
|
-
lineNumber:
|
|
1038
|
-
altLineNumber: type === "change" ? void 0 :
|
|
1039
|
-
lineIndex: `${
|
|
1062
|
+
lineNumber: additionLine.lineNumber,
|
|
1063
|
+
altLineNumber: type === "change" ? void 0 : deletionLine.lineNumber ?? void 0,
|
|
1064
|
+
lineIndex: `${additionLine.unifiedLineIndex},${splitLineIndex}`
|
|
1040
1065
|
});
|
|
1041
1066
|
}
|
|
1042
1067
|
}
|
|
@@ -1203,9 +1228,78 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
|
|
|
1203
1228
|
};
|
|
1204
1229
|
}
|
|
1205
1230
|
|
|
1231
|
+
//#endregion
|
|
1232
|
+
//#region src/utils/iterateOverFile.ts
|
|
1233
|
+
/**
|
|
1234
|
+
* Iterates over lines in a file with optional windowing support.
|
|
1235
|
+
*
|
|
1236
|
+
* Similar to `iterateOverDiff` but simplified for linear file content.
|
|
1237
|
+
* Supports viewport windowing for virtualization scenarios.
|
|
1238
|
+
*
|
|
1239
|
+
* @param props - Configuration for iteration
|
|
1240
|
+
* @param props.lines - Pre-split array of lines (use splitFileContents() to create from string)
|
|
1241
|
+
* @param props.startingLine - Optional starting line index (0-based, default: 0)
|
|
1242
|
+
* @param props.totalLines - Optional max lines to iterate (default: Infinity)
|
|
1243
|
+
* @param props.callback - Callback invoked for each line in the window.
|
|
1244
|
+
* Return `true` to stop iteration early.
|
|
1245
|
+
*
|
|
1246
|
+
* @example
|
|
1247
|
+
* ```typescript
|
|
1248
|
+
* const lines = splitFileContents('line1\nline2\nline3');
|
|
1249
|
+
* iterateOverFile({
|
|
1250
|
+
* lines,
|
|
1251
|
+
* startingLine: 0,
|
|
1252
|
+
* totalLines: 10,
|
|
1253
|
+
* callback: ({ lineIndex, lineNumber, content, isLastLine }) => {
|
|
1254
|
+
* console.log(`Line ${lineNumber}: ${content}`);
|
|
1255
|
+
* if (content.includes('stop')) return true; // Stop iteration
|
|
1256
|
+
* }
|
|
1257
|
+
* });
|
|
1258
|
+
* ```
|
|
1259
|
+
*/
|
|
1260
|
+
function iterateOverFile({ lines, startingLine = 0, totalLines = Infinity, callback }) {
|
|
1261
|
+
const len = Math.min(startingLine + totalLines, lines.length);
|
|
1262
|
+
const lastLineIndex = (() => {
|
|
1263
|
+
const lastLine = lines.at(-1);
|
|
1264
|
+
if (lastLine === "" || lastLine === "\n" || lastLine === "\r\n" || lastLine === "\r") return Math.max(0, lines.length - 2);
|
|
1265
|
+
return lines.length - 1;
|
|
1266
|
+
})();
|
|
1267
|
+
for (let lineIndex = startingLine; lineIndex < len; lineIndex++) {
|
|
1268
|
+
const isLastLine = lineIndex === lastLineIndex;
|
|
1269
|
+
if (callback({
|
|
1270
|
+
lineIndex,
|
|
1271
|
+
lineNumber: lineIndex + 1,
|
|
1272
|
+
content: lines[lineIndex],
|
|
1273
|
+
isLastLine
|
|
1274
|
+
}) === true || isLastLine) break;
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
//#endregion
|
|
1279
|
+
//#region src/utils/splitFileContents.ts
|
|
1280
|
+
/**
|
|
1281
|
+
* Splits file contents into lines using the same logic as diff parsing.
|
|
1282
|
+
* - Preserves trailing newlines on each line
|
|
1283
|
+
*
|
|
1284
|
+
* @param contents - The raw file contents string
|
|
1285
|
+
* @returns Array of lines with newlines preserved
|
|
1286
|
+
*/
|
|
1287
|
+
function splitFileContents(contents) {
|
|
1288
|
+
return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1206
1291
|
//#endregion
|
|
1207
1292
|
//#region src/utils/renderFileWithHighlighter.ts
|
|
1208
|
-
|
|
1293
|
+
const DEFAULT_PLAIN_TEXT_OPTIONS = { forcePlainText: false };
|
|
1294
|
+
function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES, tokenizeMaxLineLength }, { forcePlainText, startingLine, totalLines, lines } = DEFAULT_PLAIN_TEXT_OPTIONS) {
|
|
1295
|
+
if (forcePlainText) {
|
|
1296
|
+
startingLine ??= 0;
|
|
1297
|
+
totalLines ??= Infinity;
|
|
1298
|
+
} else {
|
|
1299
|
+
startingLine = 0;
|
|
1300
|
+
totalLines = Infinity;
|
|
1301
|
+
}
|
|
1302
|
+
const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;
|
|
1209
1303
|
const { state, transformers } = createTransformerWithState();
|
|
1210
1304
|
const lang = forcePlainText ? "text" : file.lang ?? getFiletypeFromFileName(file.name);
|
|
1211
1305
|
const baseThemeType = (() => {
|
|
@@ -1217,8 +1311,8 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
|
|
|
1217
1311
|
});
|
|
1218
1312
|
state.lineInfo = (shikiLineNumber) => ({
|
|
1219
1313
|
type: "context",
|
|
1220
|
-
lineIndex: shikiLineNumber - 1,
|
|
1221
|
-
lineNumber: shikiLineNumber
|
|
1314
|
+
lineIndex: shikiLineNumber - 1 + startingLine,
|
|
1315
|
+
lineNumber: shikiLineNumber + startingLine
|
|
1222
1316
|
});
|
|
1223
1317
|
const hastConfig = (() => {
|
|
1224
1318
|
if (typeof theme === "string") return {
|
|
@@ -1238,12 +1332,27 @@ function renderFileWithHighlighter(file, highlighter$1, { theme = DEFAULT_THEMES
|
|
|
1238
1332
|
tokenizeMaxLineLength
|
|
1239
1333
|
};
|
|
1240
1334
|
})();
|
|
1335
|
+
const highlightedLines = getLineNodes(highlighter$1.codeToHast(isWindowedHighlight ? extractWindowedFileContent(lines ?? splitFileContents(file.contents), startingLine, totalLines) : cleanLastNewline(file.contents), hastConfig));
|
|
1336
|
+
const code = isWindowedHighlight ? new Array(startingLine) : highlightedLines;
|
|
1337
|
+
if (isWindowedHighlight) code.push(...highlightedLines);
|
|
1241
1338
|
return {
|
|
1242
|
-
code
|
|
1339
|
+
code,
|
|
1243
1340
|
themeStyles,
|
|
1244
1341
|
baseThemeType
|
|
1245
1342
|
};
|
|
1246
1343
|
}
|
|
1344
|
+
function extractWindowedFileContent(lines, startingLine, totalLines) {
|
|
1345
|
+
let windowContent = "";
|
|
1346
|
+
iterateOverFile({
|
|
1347
|
+
lines,
|
|
1348
|
+
startingLine,
|
|
1349
|
+
totalLines,
|
|
1350
|
+
callback({ content }) {
|
|
1351
|
+
windowContent += content;
|
|
1352
|
+
}
|
|
1353
|
+
});
|
|
1354
|
+
return windowContent;
|
|
1355
|
+
}
|
|
1247
1356
|
|
|
1248
1357
|
//#endregion
|
|
1249
1358
|
//#region src/worker/worker.ts
|