@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderFileWithHighlighter.js","names":["hastConfig: CodeToHastOptions<DiffsThemeNames>"],"sources":["../../src/utils/renderFileWithHighlighter.ts"],"sourcesContent":["import { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n RenderFileOptions,\n ThemedFileResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\n\nexport function renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n { theme = DEFAULT_THEMES, tokenizeMaxLineLength }: RenderFileOptions,\n forcePlainText =
|
|
1
|
+
{"version":3,"file":"renderFileWithHighlighter.js","names":["DEFAULT_PLAIN_TEXT_OPTIONS: ForceFilePlainTextOptions","hastConfig: CodeToHastOptions<DiffsThemeNames>","windowContent: string"],"sources":["../../src/utils/renderFileWithHighlighter.ts"],"sourcesContent":["import { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n ForceFilePlainTextOptions,\n RenderFileOptions,\n ThemedFileResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\nimport { iterateOverFile } from './iterateOverFile';\nimport { splitFileContents } from './splitFileContents';\n\nconst DEFAULT_PLAIN_TEXT_OPTIONS: ForceFilePlainTextOptions = {\n forcePlainText: false,\n};\n\nexport function renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n { theme = DEFAULT_THEMES, tokenizeMaxLineLength }: RenderFileOptions,\n {\n forcePlainText,\n startingLine,\n totalLines,\n lines,\n }: ForceFilePlainTextOptions = DEFAULT_PLAIN_TEXT_OPTIONS\n): ThemedFileResult {\n if (forcePlainText) {\n startingLine ??= 0;\n totalLines ??= Infinity;\n } else {\n // If we aren't forcing plain text, then we intentionally do not support\n // ranges for highlighting as that could break the syntax highlighting, we\n // we override any values that may have been passed in. Maybe one day we\n // warn about this?\n startingLine = 0;\n totalLines = Infinity;\n }\n const isWindowedHighlight = startingLine > 0 || totalLines < Infinity;\n const { state, transformers } = createTransformerWithState();\n const lang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const baseThemeType = (() => {\n if (typeof theme === 'string') {\n return highlighter.getTheme(theme).type;\n }\n return undefined;\n })();\n const themeStyles = getHighlighterThemeStyles({\n theme,\n highlighter,\n });\n state.lineInfo = (shikiLineNumber: number) => ({\n type: 'context',\n lineIndex: shikiLineNumber - 1 + startingLine,\n lineNumber: shikiLineNumber + startingLine,\n });\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n if (typeof theme === 'string') {\n return {\n lang,\n theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n tokenizeMaxLineLength,\n };\n }\n return {\n lang,\n themes: theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix('token'),\n tokenizeMaxLineLength,\n };\n })();\n const highlightedLines = getLineNodes(\n highlighter.codeToHast(\n isWindowedHighlight\n ? extractWindowedFileContent(\n lines ?? splitFileContents(file.contents),\n startingLine,\n totalLines\n )\n : cleanLastNewline(file.contents),\n hastConfig\n )\n );\n\n // Create sparse array for windowed rendering\n const code = isWindowedHighlight ? new Array(startingLine) : highlightedLines;\n if (isWindowedHighlight) {\n code.push(...highlightedLines);\n }\n\n return { code, themeStyles, baseThemeType };\n}\n\nfunction extractWindowedFileContent(\n lines: string[],\n startingLine: number,\n totalLines: number\n): string {\n let windowContent: string = '';\n iterateOverFile({\n lines,\n startingLine,\n totalLines,\n callback({ content }) {\n windowContent += content;\n },\n });\n return windowContent;\n}\n"],"mappings":";;;;;;;;;;;AAmBA,MAAMA,6BAAwD,EAC5D,gBAAgB,OACjB;AAED,SAAgB,0BACd,MACA,aACA,EAAE,QAAQ,gBAAgB,yBAC1B,EACE,gBACA,cACA,YACA,UAC6B,4BACb;AAClB,KAAI,gBAAgB;AAClB,mBAAiB;AACjB,iBAAe;QACV;AAKL,iBAAe;AACf,eAAa;;CAEf,MAAM,sBAAsB,eAAe,KAAK,aAAa;CAC7D,MAAM,EAAE,OAAO,iBAAiB,4BAA4B;CAC5D,MAAM,OAAO,iBACT,SACC,KAAK,QAAQ,wBAAwB,KAAK,KAAK;CACpD,MAAM,uBAAuB;AAC3B,MAAI,OAAO,UAAU,SACnB,QAAO,YAAY,SAAS,MAAM,CAAC;KAGnC;CACJ,MAAM,cAAc,0BAA0B;EAC5C;EACA;EACD,CAAC;AACF,OAAM,YAAY,qBAA6B;EAC7C,MAAM;EACN,WAAW,kBAAkB,IAAI;EACjC,YAAY,kBAAkB;EAC/B;CACD,MAAMC,oBAAwD;AAC5D,MAAI,OAAO,UAAU,SACnB,QAAO;GACL;GACA;GACA;GACA,cAAc;GACd,mBAAmB,wBAAwB,QAAQ;GACnD;GACD;AAEH,SAAO;GACL;GACA,QAAQ;GACR;GACA,cAAc;GACd,mBAAmB,wBAAwB,QAAQ;GACnD;GACD;KACC;CACJ,MAAM,mBAAmB,aACvB,YAAY,WACV,sBACI,2BACE,SAAS,kBAAkB,KAAK,SAAS,EACzC,cACA,WACD,GACD,iBAAiB,KAAK,SAAS,EACnC,WACD,CACF;CAGD,MAAM,OAAO,sBAAsB,IAAI,MAAM,aAAa,GAAG;AAC7D,KAAI,oBACF,MAAK,KAAK,GAAG,iBAAiB;AAGhC,QAAO;EAAE;EAAM;EAAa;EAAe;;AAG7C,SAAS,2BACP,OACA,cACA,YACQ;CACR,IAAIC,gBAAwB;AAC5B,iBAAgB;EACd;EACA;EACA;EACA,SAAS,EAAE,WAAW;AACpB,oBAAiB;;EAEpB,CAAC;AACF,QAAO"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { HunkSeparators, VirtualFileMetrics } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/resolveVirtualFileMetrics.d.ts
|
|
4
|
+
declare function resolveVirtualFileMetrics(hunkSeparators: HunkSeparators, metricsOverride?: Partial<VirtualFileMetrics>): VirtualFileMetrics;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { resolveVirtualFileMetrics };
|
|
7
|
+
//# sourceMappingURL=resolveVirtualFileMetrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveVirtualFileMetrics.d.ts","names":["HunkSeparators","VirtualFileMetrics","resolveVirtualFileMetrics","Partial"],"sources":["../../src/utils/resolveVirtualFileMetrics.d.ts"],"sourcesContent":["import type { HunkSeparators, VirtualFileMetrics } from '../types';\nexport declare function resolveVirtualFileMetrics(hunkSeparators: HunkSeparators, metricsOverride?: Partial<VirtualFileMetrics>): VirtualFileMetrics;\n//# sourceMappingURL=resolveVirtualFileMetrics.d.ts.map"],"mappings":";;;iBACwBE,yBAAAA,iBAA0CF,kCAAkCG,QAAQF,sBAAsBA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DEFAULT_VIRTUAL_FILE_METRICS } from "../constants.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/resolveVirtualFileMetrics.ts
|
|
4
|
+
function resolveVirtualFileMetrics(hunkSeparators, metricsOverride) {
|
|
5
|
+
const metrics = {
|
|
6
|
+
...DEFAULT_VIRTUAL_FILE_METRICS,
|
|
7
|
+
...metricsOverride
|
|
8
|
+
};
|
|
9
|
+
metrics.hunkSeparatorHeight = getHunkSeparatorHeight(hunkSeparators, metricsOverride?.hunkSeparatorHeight);
|
|
10
|
+
return metrics;
|
|
11
|
+
}
|
|
12
|
+
function getHunkSeparatorHeight(type, customHeight) {
|
|
13
|
+
if (customHeight != null) return customHeight;
|
|
14
|
+
switch (type) {
|
|
15
|
+
case "simple": return 4;
|
|
16
|
+
case "metadata":
|
|
17
|
+
case "line-info":
|
|
18
|
+
case "line-info-basic":
|
|
19
|
+
case "custom": return 32;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
export { resolveVirtualFileMetrics };
|
|
25
|
+
//# sourceMappingURL=resolveVirtualFileMetrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveVirtualFileMetrics.js","names":["metrics: VirtualFileMetrics"],"sources":["../../src/utils/resolveVirtualFileMetrics.ts"],"sourcesContent":["import { DEFAULT_VIRTUAL_FILE_METRICS } from '../constants';\nimport type { HunkSeparators, VirtualFileMetrics } from '../types';\n\nexport function resolveVirtualFileMetrics(\n hunkSeparators: HunkSeparators,\n metricsOverride?: Partial<VirtualFileMetrics>\n): VirtualFileMetrics {\n const metrics: VirtualFileMetrics = {\n ...DEFAULT_VIRTUAL_FILE_METRICS,\n ...metricsOverride,\n };\n metrics.hunkSeparatorHeight = getHunkSeparatorHeight(\n hunkSeparators,\n metricsOverride?.hunkSeparatorHeight\n );\n return metrics;\n}\n\nfunction getHunkSeparatorHeight(\n type: HunkSeparators,\n customHeight: number | undefined\n): number {\n if (customHeight != null) {\n return customHeight;\n }\n switch (type) {\n case 'simple':\n return 4;\n case 'metadata':\n case 'line-info':\n case 'line-info-basic':\n case 'custom':\n return 32;\n }\n}\n"],"mappings":";;;AAGA,SAAgB,0BACd,gBACA,iBACoB;CACpB,MAAMA,UAA8B;EAClC,GAAG;EACH,GAAG;EACJ;AACD,SAAQ,sBAAsB,uBAC5B,gBACA,iBAAiB,oBAClB;AACD,QAAO;;AAGT,SAAS,uBACP,MACA,cACQ;AACR,KAAI,gBAAgB,KAClB,QAAO;AAET,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,SACH,QAAO"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FileContents, FileDiffMetadata, SupportedLanguages } from "../types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/utils/setLanguageOverride.d.ts
|
|
4
|
-
declare function setLanguageOverride
|
|
4
|
+
declare function setLanguageOverride(fileOrDiff: FileContents, lang: SupportedLanguages): FileContents;
|
|
5
|
+
declare function setLanguageOverride(fileOrDiff: FileDiffMetadata, lang: SupportedLanguages): FileDiffMetadata;
|
|
5
6
|
//#endregion
|
|
6
7
|
export { setLanguageOverride };
|
|
7
8
|
//# sourceMappingURL=setLanguageOverride.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setLanguageOverride.d.ts","names":[],"sources":["../../src/utils/setLanguageOverride.ts"],"sourcesContent":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"setLanguageOverride.d.ts","names":["FileContents","FileDiffMetadata","SupportedLanguages","setLanguageOverride"],"sources":["../../src/utils/setLanguageOverride.d.ts"],"sourcesContent":["import type { FileContents, FileDiffMetadata, SupportedLanguages } from '../types';\nexport declare function setLanguageOverride(fileOrDiff: FileContents, lang: SupportedLanguages): FileContents;\nexport declare function setLanguageOverride(fileOrDiff: FileDiffMetadata, lang: SupportedLanguages): FileDiffMetadata;\n//# sourceMappingURL=setLanguageOverride.d.ts.map"],"mappings":";;;iBACwBG,mBAAAA,aAAgCH,oBAAoBE,qBAAqBF;iBACzEG,mBAAAA,aAAgCF,wBAAwBC,qBAAqBD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setLanguageOverride.js","names":[],"sources":["../../src/utils/setLanguageOverride.ts"],"sourcesContent":["import type {\n FileContents,\n FileDiffMetadata,\n SupportedLanguages,\n} from '../types';\n\nexport function setLanguageOverride
|
|
1
|
+
{"version":3,"file":"setLanguageOverride.js","names":[],"sources":["../../src/utils/setLanguageOverride.ts"],"sourcesContent":["import type {\n FileContents,\n FileDiffMetadata,\n SupportedLanguages,\n} from '../types';\n\nexport function setLanguageOverride(\n fileOrDiff: FileContents,\n lang: SupportedLanguages\n): FileContents;\nexport function setLanguageOverride(\n fileOrDiff: FileDiffMetadata,\n lang: SupportedLanguages\n): FileDiffMetadata;\nexport function setLanguageOverride(\n fileOrDiff: FileContents | FileDiffMetadata,\n lang: SupportedLanguages\n): FileContents | FileDiffMetadata {\n return { ...fileOrDiff, lang };\n}\n"],"mappings":";AAcA,SAAgB,oBACd,YACA,MACiC;AACjC,QAAO;EAAE,GAAG;EAAY;EAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setWrapperNodeProps.d.ts","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"setWrapperNodeProps.d.ts","names":["PrePropertiesConfig","setPreNodeProperties","HTMLPreElement","type","diffIndicators","disableBackground","disableLineNumbers","overflow","split","themeStyles","themeType","totalLines"],"sources":["../../src/utils/setWrapperNodeProps.d.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\nexport declare function setPreNodeProperties(pre: HTMLPreElement, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines }: PrePropertiesConfig): HTMLPreElement;\n//# sourceMappingURL=setWrapperNodeProps.d.ts.map"],"mappings":";;;iBACwBC,oBAAAA,MAA0BC;;;;;;;;;;GAAsIF,sBAAsBE"}
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
//#region src/utils/setWrapperNodeProps.ts
|
|
2
|
-
function setPreNodeProperties(pre, { diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines }) {
|
|
3
|
-
if (
|
|
4
|
-
|
|
2
|
+
function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines }) {
|
|
3
|
+
if (type === "diff") {
|
|
4
|
+
pre.setAttribute("data-diff", "");
|
|
5
|
+
pre.removeAttribute("data-file");
|
|
6
|
+
} else {
|
|
7
|
+
pre.setAttribute("data-file", "");
|
|
8
|
+
pre.removeAttribute("data-diff");
|
|
9
|
+
}
|
|
10
|
+
if (themeType === "system") pre.removeAttribute("data-theme-type");
|
|
11
|
+
else pre.setAttribute("data-theme-type", themeType);
|
|
5
12
|
switch (diffIndicators) {
|
|
6
13
|
case "bars":
|
|
7
14
|
case "classic":
|
|
8
|
-
pre.
|
|
15
|
+
pre.setAttribute("data-indicators", diffIndicators);
|
|
9
16
|
break;
|
|
10
17
|
case "none":
|
|
11
|
-
|
|
18
|
+
pre.removeAttribute("data-indicators");
|
|
12
19
|
break;
|
|
13
20
|
}
|
|
14
|
-
if (disableLineNumbers) pre.
|
|
15
|
-
else
|
|
16
|
-
if (disableBackground)
|
|
17
|
-
else pre.
|
|
18
|
-
pre.
|
|
19
|
-
pre.
|
|
20
|
-
pre.
|
|
21
|
+
if (disableLineNumbers) pre.setAttribute("data-disable-line-numbers", "");
|
|
22
|
+
else pre.removeAttribute("data-disable-line-numbers");
|
|
23
|
+
if (disableBackground) pre.removeAttribute("data-background");
|
|
24
|
+
else pre.setAttribute("data-background", "");
|
|
25
|
+
if (type === "diff") pre.setAttribute("data-diff-type", split ? "split" : "single");
|
|
26
|
+
else pre.removeAttribute("data-diff-type");
|
|
27
|
+
pre.setAttribute("data-overflow", overflow);
|
|
21
28
|
pre.tabIndex = 0;
|
|
22
29
|
pre.style = themeStyles;
|
|
23
30
|
pre.style.setProperty("--diffs-min-number-column-width-default", `${`${totalLines}`.length}ch`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setWrapperNodeProps.js","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\n\nexport function setPreNodeProperties(\n pre: HTMLPreElement,\n {\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split,\n themeStyles,\n themeType,\n totalLines,\n }: PrePropertiesConfig\n): HTMLPreElement {\n if (
|
|
1
|
+
{"version":3,"file":"setWrapperNodeProps.js","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\n\nexport function setPreNodeProperties(\n pre: HTMLPreElement,\n {\n type,\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split,\n themeStyles,\n themeType,\n totalLines,\n }: PrePropertiesConfig\n): HTMLPreElement {\n if (type === 'diff') {\n pre.setAttribute('data-diff', '');\n pre.removeAttribute('data-file');\n } else {\n pre.setAttribute('data-file', '');\n pre.removeAttribute('data-diff');\n }\n if (themeType === 'system') {\n pre.removeAttribute('data-theme-type');\n } else {\n pre.setAttribute('data-theme-type', themeType);\n }\n switch (diffIndicators) {\n case 'bars':\n case 'classic':\n pre.setAttribute('data-indicators', diffIndicators);\n break;\n case 'none':\n pre.removeAttribute('data-indicators');\n break;\n }\n if (disableLineNumbers) {\n pre.setAttribute('data-disable-line-numbers', '');\n } else {\n pre.removeAttribute('data-disable-line-numbers');\n }\n if (disableBackground) {\n pre.removeAttribute('data-background');\n } else {\n pre.setAttribute('data-background', '');\n }\n if (type === 'diff') {\n pre.setAttribute('data-diff-type', split ? 'split' : 'single');\n } else {\n pre.removeAttribute('data-diff-type');\n }\n pre.setAttribute('data-overflow', overflow);\n pre.tabIndex = 0;\n // Set theme color custom properties as inline styles on pre element\n pre.style = themeStyles;\n // Set CSS custom property for line number column width\n pre.style.setProperty(\n '--diffs-min-number-column-width-default',\n `${`${totalLines}`.length}ch`\n );\n return pre;\n}\n"],"mappings":";AAEA,SAAgB,qBACd,KACA,EACE,MACA,gBACA,mBACA,oBACA,UACA,OACA,aACA,WACA,cAEc;AAChB,KAAI,SAAS,QAAQ;AACnB,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;QAC3B;AACL,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;;AAElC,KAAI,cAAc,SAChB,KAAI,gBAAgB,kBAAkB;KAEtC,KAAI,aAAa,mBAAmB,UAAU;AAEhD,SAAQ,gBAAR;EACE,KAAK;EACL,KAAK;AACH,OAAI,aAAa,mBAAmB,eAAe;AACnD;EACF,KAAK;AACH,OAAI,gBAAgB,kBAAkB;AACtC;;AAEJ,KAAI,mBACF,KAAI,aAAa,6BAA6B,GAAG;KAEjD,KAAI,gBAAgB,4BAA4B;AAElD,KAAI,kBACF,KAAI,gBAAgB,kBAAkB;KAEtC,KAAI,aAAa,mBAAmB,GAAG;AAEzC,KAAI,SAAS,OACX,KAAI,aAAa,kBAAkB,QAAQ,UAAU,SAAS;KAE9D,KAAI,gBAAgB,iBAAiB;AAEvC,KAAI,aAAa,iBAAiB,SAAS;AAC3C,KAAI,WAAW;AAEf,KAAI,QAAQ;AAEZ,KAAI,MAAM,YACR,2CACA,GAAG,GAAG,aAAa,OAAO,IAC3B;AACD,QAAO"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/utils/splitFileContents.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Splits file contents into lines using the same logic as diff parsing.
|
|
4
|
+
* - Preserves trailing newlines on each line
|
|
5
|
+
*
|
|
6
|
+
* @param contents - The raw file contents string
|
|
7
|
+
* @returns Array of lines with newlines preserved
|
|
8
|
+
*/
|
|
9
|
+
declare function splitFileContents(contents: string): string[];
|
|
10
|
+
//#endregion
|
|
11
|
+
export { splitFileContents };
|
|
12
|
+
//# sourceMappingURL=splitFileContents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitFileContents.d.ts","names":["splitFileContents"],"sources":["../../src/utils/splitFileContents.d.ts"],"sourcesContent":["/**\n * Splits file contents into lines using the same logic as diff parsing.\n * - Preserves trailing newlines on each line\n *\n * @param contents - The raw file contents string\n * @returns Array of lines with newlines preserved\n */\nexport declare function splitFileContents(contents: string): string[];\n//# sourceMappingURL=splitFileContents.d.ts.map"],"mappings":";;AAOA;;;;;;iBAAwBA,iBAAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SPLIT_WITH_NEWLINES } from "../constants.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/splitFileContents.ts
|
|
4
|
+
/**
|
|
5
|
+
* Splits file contents into lines using the same logic as diff parsing.
|
|
6
|
+
* - Preserves trailing newlines on each line
|
|
7
|
+
*
|
|
8
|
+
* @param contents - The raw file contents string
|
|
9
|
+
* @returns Array of lines with newlines preserved
|
|
10
|
+
*/
|
|
11
|
+
function splitFileContents(contents) {
|
|
12
|
+
return contents !== "" ? contents.split(SPLIT_WITH_NEWLINES) : [];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { splitFileContents };
|
|
17
|
+
//# sourceMappingURL=splitFileContents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitFileContents.js","names":[],"sources":["../../src/utils/splitFileContents.ts"],"sourcesContent":["import { SPLIT_WITH_NEWLINES } from '../constants';\n\n/**\n * Splits file contents into lines using the same logic as diff parsing.\n * - Preserves trailing newlines on each line\n *\n * @param contents - The raw file contents string\n * @returns Array of lines with newlines preserved\n */\nexport function splitFileContents(contents: string): string[] {\n return contents !== '' ? contents.split(SPLIT_WITH_NEWLINES) : [];\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,kBAAkB,UAA4B;AAC5D,QAAO,aAAa,KAAK,SAAS,MAAM,oBAAoB,GAAG,EAAE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/utils/trimPatchContext.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* A utility function to trim out excess context lines from a patch file. It
|
|
4
|
+
* will maintain line numbers, and properly update the hunk context markers, as
|
|
5
|
+
* well as be able to create new hunks where necessary if there's excessive
|
|
6
|
+
* context between changes
|
|
7
|
+
*/
|
|
8
|
+
declare function trimPatchContext(patch: string, contextSize?: number): string;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { trimPatchContext };
|
|
11
|
+
//# sourceMappingURL=trimPatchContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trimPatchContext.d.ts","names":["trimPatchContext"],"sources":["../../src/utils/trimPatchContext.d.ts"],"sourcesContent":["/**\n * A utility function to trim out excess context lines from a patch file. It\n * will maintain line numbers, and properly update the hunk context markers, as\n * well as be able to create new hunks where necessary if there's excessive\n * context between changes\n */\nexport declare function trimPatchContext(patch: string, contextSize?: number): string;\n//# sourceMappingURL=trimPatchContext.d.ts.map"],"mappings":";;AAMA;;;;;iBAAwBA,gBAAAA"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { HUNK_HEADER } from "../constants.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/trimPatchContext.ts
|
|
4
|
+
/**
|
|
5
|
+
* A utility function to trim out excess context lines from a patch file. It
|
|
6
|
+
* will maintain line numbers, and properly update the hunk context markers, as
|
|
7
|
+
* well as be able to create new hunks where necessary if there's excessive
|
|
8
|
+
* context between changes
|
|
9
|
+
*/
|
|
10
|
+
function trimPatchContext(patch, contextSize = 10) {
|
|
11
|
+
const lines = [];
|
|
12
|
+
let currentHunk;
|
|
13
|
+
for (const line of patch.split("\n")) {
|
|
14
|
+
const parsedHunkHeader = line.match(HUNK_HEADER);
|
|
15
|
+
if (parsedHunkHeader != null) {
|
|
16
|
+
if (currentHunk != null) {
|
|
17
|
+
if (currentHunk.hunkLines.length > 0) {
|
|
18
|
+
flushContextLines(currentHunk, contextSize);
|
|
19
|
+
flushHunk(currentHunk, lines);
|
|
20
|
+
}
|
|
21
|
+
currentHunk = void 0;
|
|
22
|
+
}
|
|
23
|
+
const additionStart = parseInt(parsedHunkHeader[3]);
|
|
24
|
+
const deletionStart = parseInt(parsedHunkHeader[1]);
|
|
25
|
+
const additionCount = parseInt(parsedHunkHeader[4] ?? "1");
|
|
26
|
+
const deletionCount = parseInt(parsedHunkHeader[2] ?? "1");
|
|
27
|
+
if (isNaN(additionStart) || isNaN(deletionStart) || isNaN(additionCount) || isNaN(deletionCount)) lines.push(line);
|
|
28
|
+
else currentHunk = {
|
|
29
|
+
hunkContextString: parsedHunkHeader[5] ?? "",
|
|
30
|
+
additionStart,
|
|
31
|
+
deletionStart,
|
|
32
|
+
additionCount: 0,
|
|
33
|
+
deletionCount: 0,
|
|
34
|
+
hunkLines: [],
|
|
35
|
+
contextLines: []
|
|
36
|
+
};
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (currentHunk == null) {
|
|
40
|
+
lines.push(line);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (line.startsWith(" ")) {
|
|
44
|
+
currentHunk.contextLines.push(line);
|
|
45
|
+
if (currentHunk.hunkLines.length > 0 && currentHunk.contextLines.length === contextSize * 2 + 1) {
|
|
46
|
+
const removedItems = currentHunk.contextLines.slice(contextSize);
|
|
47
|
+
flushContextLines(currentHunk, contextSize);
|
|
48
|
+
const { additionCount: emittedAdditionCount, deletionCount: emittedDeletionCount } = currentHunk;
|
|
49
|
+
flushHunk(currentHunk, lines);
|
|
50
|
+
removedItems.shift();
|
|
51
|
+
currentHunk = {
|
|
52
|
+
hunkContextString: "",
|
|
53
|
+
additionStart: currentHunk.additionStart + emittedAdditionCount + 1,
|
|
54
|
+
deletionStart: currentHunk.deletionStart + emittedDeletionCount + 1,
|
|
55
|
+
deletionCount: 0,
|
|
56
|
+
additionCount: 0,
|
|
57
|
+
contextLines: removedItems,
|
|
58
|
+
hunkLines: []
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
} else if (line !== "") {
|
|
62
|
+
flushContextLines(currentHunk, contextSize);
|
|
63
|
+
currentHunk.hunkLines.push(line);
|
|
64
|
+
if (line.startsWith("+")) currentHunk.additionCount += 1;
|
|
65
|
+
else if (line.startsWith("-")) currentHunk.deletionCount += 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (currentHunk != null && currentHunk.hunkLines.length > 0) {
|
|
69
|
+
flushContextLines(currentHunk, contextSize);
|
|
70
|
+
flushHunk(currentHunk, lines);
|
|
71
|
+
}
|
|
72
|
+
return lines.join("\n");
|
|
73
|
+
}
|
|
74
|
+
function flushContextLines(hunk, contextSize) {
|
|
75
|
+
if (hunk.contextLines.length > contextSize) if (hunk.hunkLines.length === 0) {
|
|
76
|
+
const difference = hunk.contextLines.length - contextSize;
|
|
77
|
+
hunk.contextLines.splice(0, difference);
|
|
78
|
+
hunk.additionStart += difference;
|
|
79
|
+
hunk.deletionStart += difference;
|
|
80
|
+
} else hunk.contextLines.length = contextSize;
|
|
81
|
+
if (hunk.contextLines.length > 0) {
|
|
82
|
+
hunk.hunkLines.push(...hunk.contextLines);
|
|
83
|
+
hunk.additionCount += hunk.contextLines.length;
|
|
84
|
+
hunk.deletionCount += hunk.contextLines.length;
|
|
85
|
+
hunk.contextLines.length = 0;
|
|
86
|
+
}
|
|
87
|
+
return hunk;
|
|
88
|
+
}
|
|
89
|
+
function flushHunk(hunk, lines) {
|
|
90
|
+
lines.push(`@@ -${formatHunkRange(hunk.deletionStart, hunk.deletionCount)} +${formatHunkRange(hunk.additionStart, hunk.additionCount)} @@${hunk.hunkContextString !== "" ? ` ${hunk.hunkContextString}` : ""}`);
|
|
91
|
+
lines.push(...hunk.hunkLines);
|
|
92
|
+
}
|
|
93
|
+
function formatHunkRange(start, count) {
|
|
94
|
+
return count === 1 ? `${start}` : `${start},${count}`;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
//#endregion
|
|
98
|
+
export { trimPatchContext };
|
|
99
|
+
//# sourceMappingURL=trimPatchContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trimPatchContext.js","names":["lines: string[]","currentHunk: CurrentHunk | undefined"],"sources":["../../src/utils/trimPatchContext.ts"],"sourcesContent":["import { HUNK_HEADER } from '../constants';\n\ninterface CurrentHunk {\n hunkContextString: string;\n additionStart: number;\n deletionStart: number;\n additionCount: number;\n deletionCount: number;\n hunkLines: string[];\n contextLines: string[];\n}\n\n/**\n * A utility function to trim out excess context lines from a patch file. It\n * will maintain line numbers, and properly update the hunk context markers, as\n * well as be able to create new hunks where necessary if there's excessive\n * context between changes\n */\nexport function trimPatchContext(patch: string, contextSize = 10): string {\n const lines: string[] = [];\n\n let currentHunk: CurrentHunk | undefined;\n for (const line of patch.split('\\n')) {\n const parsedHunkHeader = line.match(HUNK_HEADER);\n // If we've come across a new hunk boundary, then we should close out the\n // current hunk and setup a new one\n if (parsedHunkHeader != null) {\n if (currentHunk != null) {\n if (currentHunk.hunkLines.length > 0) {\n flushContextLines(currentHunk, contextSize);\n flushHunk(currentHunk, lines);\n }\n currentHunk = undefined;\n }\n\n const additionStart = parseInt(parsedHunkHeader[3]);\n const deletionStart = parseInt(parsedHunkHeader[1]);\n const additionCount = parseInt(parsedHunkHeader[4] ?? '1');\n const deletionCount = parseInt(parsedHunkHeader[2] ?? '1');\n\n // If we can't parse valid numbers out of the hunk header\n // lets just skip the hunk altogether\n if (\n isNaN(additionStart) ||\n isNaN(deletionStart) ||\n isNaN(additionCount) ||\n isNaN(deletionCount)\n ) {\n lines.push(line);\n } else {\n currentHunk = {\n hunkContextString: parsedHunkHeader[5] ?? '',\n additionStart,\n deletionStart,\n additionCount: 0,\n deletionCount: 0,\n hunkLines: [],\n contextLines: [],\n };\n }\n continue;\n }\n\n // If we don't have a current hunk, then we should just assume this is\n // general metadata\n if (currentHunk == null) {\n lines.push(line);\n continue;\n }\n\n // If we are dealing with a context line...\n if (line.startsWith(' ')) {\n currentHunk.contextLines.push(line);\n // If we've exceeded double our context window size + 1, that means we\n // should create a new hunk...\n if (\n currentHunk.hunkLines.length > 0 &&\n currentHunk.contextLines.length === contextSize * 2 + 1\n ) {\n const removedItems = currentHunk.contextLines.slice(contextSize);\n flushContextLines(currentHunk, contextSize);\n const {\n additionCount: emittedAdditionCount,\n deletionCount: emittedDeletionCount,\n } = currentHunk;\n flushHunk(currentHunk, lines);\n\n removedItems.shift();\n currentHunk = {\n // NOTE(amadeus): Not sure there's an easy way to manage this context\n // string stuff, so lets just remove it from auto generated hunks\n hunkContextString: '',\n additionStart: currentHunk.additionStart + emittedAdditionCount + 1,\n deletionStart: currentHunk.deletionStart + emittedDeletionCount + 1,\n deletionCount: 0,\n additionCount: 0,\n contextLines: removedItems,\n hunkLines: [],\n };\n }\n } else if (line !== '') {\n flushContextLines(currentHunk, contextSize);\n currentHunk.hunkLines.push(line);\n if (line.startsWith('+')) {\n currentHunk.additionCount += 1;\n } else if (line.startsWith('-')) {\n currentHunk.deletionCount += 1;\n }\n }\n }\n\n if (currentHunk != null && currentHunk.hunkLines.length > 0) {\n flushContextLines(currentHunk, contextSize);\n flushHunk(currentHunk, lines);\n }\n\n return lines.join('\\n');\n}\n\nfunction flushContextLines(hunk: CurrentHunk, contextSize: number) {\n if (hunk.contextLines.length > contextSize) {\n // If this context group is at the beginning of the hunk, truncate from the\n // beginning\n if (hunk.hunkLines.length === 0) {\n const difference = hunk.contextLines.length - contextSize;\n hunk.contextLines.splice(0, difference);\n hunk.additionStart += difference;\n hunk.deletionStart += difference;\n }\n // Otherwise truncate from the end\n else {\n hunk.contextLines.length = contextSize;\n }\n }\n if (hunk.contextLines.length > 0) {\n hunk.hunkLines.push(...hunk.contextLines);\n hunk.additionCount += hunk.contextLines.length;\n hunk.deletionCount += hunk.contextLines.length;\n hunk.contextLines.length = 0;\n }\n return hunk;\n}\n\nfunction flushHunk(hunk: CurrentHunk, lines: string[]) {\n lines.push(\n `@@ -${formatHunkRange(hunk.deletionStart, hunk.deletionCount)} +${formatHunkRange(hunk.additionStart, hunk.additionCount)} @@${hunk.hunkContextString !== '' ? ` ${hunk.hunkContextString}` : ''}`\n );\n lines.push(...hunk.hunkLines);\n}\n\nfunction formatHunkRange(start: number, count: number): string {\n return count === 1 ? `${start}` : `${start},${count}`;\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAgB,iBAAiB,OAAe,cAAc,IAAY;CACxE,MAAMA,QAAkB,EAAE;CAE1B,IAAIC;AACJ,MAAK,MAAM,QAAQ,MAAM,MAAM,KAAK,EAAE;EACpC,MAAM,mBAAmB,KAAK,MAAM,YAAY;AAGhD,MAAI,oBAAoB,MAAM;AAC5B,OAAI,eAAe,MAAM;AACvB,QAAI,YAAY,UAAU,SAAS,GAAG;AACpC,uBAAkB,aAAa,YAAY;AAC3C,eAAU,aAAa,MAAM;;AAE/B,kBAAc;;GAGhB,MAAM,gBAAgB,SAAS,iBAAiB,GAAG;GACnD,MAAM,gBAAgB,SAAS,iBAAiB,GAAG;GACnD,MAAM,gBAAgB,SAAS,iBAAiB,MAAM,IAAI;GAC1D,MAAM,gBAAgB,SAAS,iBAAiB,MAAM,IAAI;AAI1D,OACE,MAAM,cAAc,IACpB,MAAM,cAAc,IACpB,MAAM,cAAc,IACpB,MAAM,cAAc,CAEpB,OAAM,KAAK,KAAK;OAEhB,eAAc;IACZ,mBAAmB,iBAAiB,MAAM;IAC1C;IACA;IACA,eAAe;IACf,eAAe;IACf,WAAW,EAAE;IACb,cAAc,EAAE;IACjB;AAEH;;AAKF,MAAI,eAAe,MAAM;AACvB,SAAM,KAAK,KAAK;AAChB;;AAIF,MAAI,KAAK,WAAW,IAAI,EAAE;AACxB,eAAY,aAAa,KAAK,KAAK;AAGnC,OACE,YAAY,UAAU,SAAS,KAC/B,YAAY,aAAa,WAAW,cAAc,IAAI,GACtD;IACA,MAAM,eAAe,YAAY,aAAa,MAAM,YAAY;AAChE,sBAAkB,aAAa,YAAY;IAC3C,MAAM,EACJ,eAAe,sBACf,eAAe,yBACb;AACJ,cAAU,aAAa,MAAM;AAE7B,iBAAa,OAAO;AACpB,kBAAc;KAGZ,mBAAmB;KACnB,eAAe,YAAY,gBAAgB,uBAAuB;KAClE,eAAe,YAAY,gBAAgB,uBAAuB;KAClE,eAAe;KACf,eAAe;KACf,cAAc;KACd,WAAW,EAAE;KACd;;aAEM,SAAS,IAAI;AACtB,qBAAkB,aAAa,YAAY;AAC3C,eAAY,UAAU,KAAK,KAAK;AAChC,OAAI,KAAK,WAAW,IAAI,CACtB,aAAY,iBAAiB;YACpB,KAAK,WAAW,IAAI,CAC7B,aAAY,iBAAiB;;;AAKnC,KAAI,eAAe,QAAQ,YAAY,UAAU,SAAS,GAAG;AAC3D,oBAAkB,aAAa,YAAY;AAC3C,YAAU,aAAa,MAAM;;AAG/B,QAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,kBAAkB,MAAmB,aAAqB;AACjE,KAAI,KAAK,aAAa,SAAS,YAG7B,KAAI,KAAK,UAAU,WAAW,GAAG;EAC/B,MAAM,aAAa,KAAK,aAAa,SAAS;AAC9C,OAAK,aAAa,OAAO,GAAG,WAAW;AACvC,OAAK,iBAAiB;AACtB,OAAK,iBAAiB;OAItB,MAAK,aAAa,SAAS;AAG/B,KAAI,KAAK,aAAa,SAAS,GAAG;AAChC,OAAK,UAAU,KAAK,GAAG,KAAK,aAAa;AACzC,OAAK,iBAAiB,KAAK,aAAa;AACxC,OAAK,iBAAiB,KAAK,aAAa;AACxC,OAAK,aAAa,SAAS;;AAE7B,QAAO;;AAGT,SAAS,UAAU,MAAmB,OAAiB;AACrD,OAAM,KACJ,OAAO,gBAAgB,KAAK,eAAe,KAAK,cAAc,CAAC,IAAI,gBAAgB,KAAK,eAAe,KAAK,cAAc,CAAC,KAAK,KAAK,sBAAsB,KAAK,IAAI,KAAK,sBAAsB,KAChM;AACD,OAAM,KAAK,GAAG,KAAK,UAAU;;AAG/B,SAAS,gBAAgB,OAAe,OAAuB;AAC7D,QAAO,UAAU,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG"}
|
|
@@ -13,6 +13,7 @@ interface ThemeSubscriber {
|
|
|
13
13
|
declare class WorkerPoolManager {
|
|
14
14
|
private options;
|
|
15
15
|
private highlighter;
|
|
16
|
+
private readonly preferredHighlighter;
|
|
16
17
|
private renderOptions;
|
|
17
18
|
private initialized;
|
|
18
19
|
private workers;
|
|
@@ -30,7 +31,8 @@ declare class WorkerPoolManager {
|
|
|
30
31
|
langs,
|
|
31
32
|
theme,
|
|
32
33
|
lineDiffType,
|
|
33
|
-
tokenizeMaxLineLength
|
|
34
|
+
tokenizeMaxLineLength,
|
|
35
|
+
preferredHighlighter
|
|
34
36
|
}: WorkerInitializationRenderOptions);
|
|
35
37
|
isWorkingPool(): boolean;
|
|
36
38
|
getFileResultCache(file: FileContents): RenderFileResult | undefined;
|
|
@@ -57,19 +59,19 @@ declare class WorkerPoolManager {
|
|
|
57
59
|
private initializeWorkers;
|
|
58
60
|
private drainQueue;
|
|
59
61
|
highlightFileAST(instance: FileRendererInstance, file: FileContents): void;
|
|
60
|
-
getPlainFileAST(file: FileContents): ThemedFileResult | undefined;
|
|
62
|
+
getPlainFileAST(file: FileContents, startingLine: number, totalLines: number, lines?: string[]): ThemedFileResult | undefined;
|
|
61
63
|
highlightDiffAST(instance: DiffRendererInstance, diff: FileDiffMetadata): void;
|
|
62
|
-
getPlainDiffAST(diff: FileDiffMetadata, startingLine: number, totalLines: number, expandedHunks?: Map<number, HunkExpansionRegion> | true): ThemedDiffResult | undefined;
|
|
64
|
+
getPlainDiffAST(diff: FileDiffMetadata, startingLine: number, totalLines: number, expandedHunks?: Map<number, HunkExpansionRegion> | true, collapsedContextThreshold?: number): ThemedDiffResult | undefined;
|
|
63
65
|
terminate(): void;
|
|
64
66
|
private terminateWorkers;
|
|
65
67
|
getStats(): WorkerStats;
|
|
66
68
|
private submitTask;
|
|
67
|
-
private submitTask;
|
|
68
69
|
private resolveLanguagesAndExecuteTask;
|
|
69
70
|
private handleWorkerMessage;
|
|
70
71
|
private _queuedDrain;
|
|
71
72
|
private queueDrain;
|
|
72
73
|
private assignWorkerToTask;
|
|
74
|
+
private clearWorkerTask;
|
|
73
75
|
private executeTask;
|
|
74
76
|
private getAvailableWorker;
|
|
75
77
|
private generateRequestId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerPoolManager.d.ts","names":["
|
|
1
|
+
{"version":3,"file":"WorkerPoolManager.d.ts","names":["LRUMapPkg","FileContents","FileDiffMetadata","HunkExpansionRegion","RenderDiffOptions","RenderDiffResult","RenderFileOptions","RenderFileResult","SupportedLanguages","ThemedDiffResult","ThemedFileResult","DiffRendererInstance","FileRendererInstance","WorkerInitializationRenderOptions","WorkerPoolOptions","WorkerRenderingOptions","WorkerStats","GetCachesResult","LRUMap","ThemeSubscriber","WorkerPoolManager","langs","theme","lineDiffType","tokenizeMaxLineLength","preferredHighlighter","Partial","Promise","Map"],"sources":["../../src/worker/WorkerPoolManager.d.ts"],"sourcesContent":["import LRUMapPkg from 'lru_map';\nimport type { FileContents, FileDiffMetadata, HunkExpansionRegion, RenderDiffOptions, RenderDiffResult, RenderFileOptions, RenderFileResult, SupportedLanguages, ThemedDiffResult, ThemedFileResult } from '../types';\nimport type { DiffRendererInstance, FileRendererInstance, WorkerInitializationRenderOptions, WorkerPoolOptions, WorkerRenderingOptions, WorkerStats } from './types';\ninterface GetCachesResult {\n fileCache: LRUMapPkg.LRUMap<string, RenderFileResult>;\n diffCache: LRUMapPkg.LRUMap<string, RenderDiffResult>;\n}\ninterface ThemeSubscriber {\n rerender(): void;\n}\nexport declare class WorkerPoolManager {\n private options;\n private highlighter;\n private readonly preferredHighlighter;\n private renderOptions;\n private initialized;\n private workers;\n private taskQueue;\n private pendingTasks;\n private nextRequestId;\n private themeSubscribers;\n private workersFailed;\n private instanceRequestMap;\n private statSubscribers;\n private fileCache;\n private diffCache;\n private _queuedBroadcast;\n constructor(options: WorkerPoolOptions, { langs, theme, lineDiffType, tokenizeMaxLineLength, preferredHighlighter }: WorkerInitializationRenderOptions);\n isWorkingPool(): boolean;\n getFileResultCache(file: FileContents): RenderFileResult | undefined;\n getDiffResultCache(diff: FileDiffMetadata): RenderDiffResult | undefined;\n inspectCaches(): GetCachesResult;\n evictFileFromCache(cacheKey: string): boolean;\n evictDiffFromCache(cacheKey: string): boolean;\n setRenderOptions({ theme, lineDiffType, tokenizeMaxLineLength }: Partial<WorkerRenderingOptions>): Promise<void>;\n getFileRenderOptions(): RenderFileOptions;\n getDiffRenderOptions(): RenderDiffOptions;\n private setRenderOptionsOnWorkers;\n subscribeToThemeChanges(instance: ThemeSubscriber): () => void;\n unsubscribeToThemeChanges(instance: ThemeSubscriber): void;\n subscribeToStatChanges(callback: (stats: WorkerStats) => unknown): () => void;\n private queueBroadcastStateChanges;\n private _broadcastStateChanges;\n cleanUpPendingTasks(instance: FileRendererInstance | DiffRendererInstance): void;\n isInitialized(): boolean;\n initialize(languages?: SupportedLanguages[]): Promise<void>;\n private initializeWorkers;\n private drainQueue;\n highlightFileAST(instance: FileRendererInstance, file: FileContents): void;\n getPlainFileAST(file: FileContents, startingLine: number, totalLines: number, lines?: string[]): ThemedFileResult | undefined;\n highlightDiffAST(instance: DiffRendererInstance, diff: FileDiffMetadata): void;\n getPlainDiffAST(diff: FileDiffMetadata, startingLine: number, totalLines: number, expandedHunks?: Map<number, HunkExpansionRegion> | true, collapsedContextThreshold?: number): ThemedDiffResult | undefined;\n terminate(): void;\n private terminateWorkers;\n getStats(): WorkerStats;\n private submitTask;\n private resolveLanguagesAndExecuteTask;\n private handleWorkerMessage;\n private _queuedDrain;\n private queueDrain;\n private assignWorkerToTask;\n private clearWorkerTask;\n private executeTask;\n private getAvailableWorker;\n private generateRequestId;\n}\nexport {};\n//# sourceMappingURL=WorkerPoolManager.d.ts.map"],"mappings":";;;;;UAGUiB,eAAAA;aACKjB,SAAAA,CAAUkB,eAAeX;EAD9BU,SAAAA,EAEKjB,SAAAA,CAAUkB,MAFA,CAAA,MAAA,EAEeb,gBAFf,CAAA;;UAIfc,eAAAA,CAHeD;EACeb,QAAAA,EAAAA,EAAAA,IAAAA;;AAAT,cAKVe,iBAAAA,CALU;EAErBD,QAAAA,OAAAA;EAGWC,QAAAA,WAAAA;EAiBIN,iBAAAA,oBAAAA;EAAqBO,QAAAA,aAAAA;EAAOC,QAAAA,WAAAA;EAAOC,QAAAA,OAAAA;EAAcC,QAAAA,SAAAA;EAAuBC,QAAAA,YAAAA;EAAwBZ,QAAAA,aAAAA;EAE5FZ,QAAAA,gBAAAA;EAAeM,QAAAA,aAAAA;EACfL,QAAAA,kBAAAA;EAAmBG,QAAAA,eAAAA;EAC3BY,QAAAA,SAAAA;EAGEK,QAAAA,SAAAA;EAAOC,QAAAA,gBAAAA;EAAcC,WAAAA,CAAAA,OAAAA,EAPnBV,iBAOmBU,EAAAA;IAAAA,KAAAA;IAAAA,KAAAA;IAAAA,YAAAA;IAAAA,qBAAAA;IAAAA;EAAAA,CAAAA,EAP6EX,iCAO7EW;EAAiCT,aAAAA,CAAAA,CAAAA,EAAAA,OAAAA;EAARW,kBAAAA,CAAAA,IAAAA,EALxCzB,YAKwCyB,CAAAA,EALzBnB,gBAKyBmB,GAAAA,SAAAA;EAAkCC,kBAAAA,CAAAA,IAAAA,EAJ1EzB,gBAI0EyB,CAAAA,EAJvDtB,gBAIuDsB,GAAAA,SAAAA;EAC3ErB,aAAAA,CAAAA,CAAAA,EAJPW,eAIOX;EACAF,kBAAAA,CAAAA,QAAAA,EAAAA,MAAAA,CAAAA,EAAAA,OAAAA;EAEUe,kBAAAA,CAAAA,QAAAA,EAAAA,MAAAA,CAAAA,EAAAA,OAAAA;EACEA,gBAAAA,CAAAA;IAAAA,KAAAA;IAAAA,YAAAA;IAAAA;EAAAA,CAAAA,EAL6BO,OAK7BP,CALqCJ,sBAKrCI,CAAAA,CAAAA,EAL+DQ,OAK/DR,CAAAA,IAAAA,CAAAA;EACKH,oBAAAA,CAAAA,CAAAA,EALjBV,iBAKiBU;EAGXJ,oBAAAA,CAAAA,CAAAA,EAPNR,iBAOMQ;EAAuBD,QAAAA,yBAAAA;EAE9BH,uBAAAA,CAAAA,QAAAA,EAPWW,eAOXX,CAAAA,EAAAA,GAAAA,GAAAA,IAAAA;EAAuBmB,yBAAAA,CAAAA,QAAAA,EANVR,eAMUQ,CAAAA,EAAAA,IAAAA;EAGnBf,sBAAAA,CAAAA,QAAAA,EAAAA,CAAAA,KAAAA,EARcI,WAQdJ,EAAAA,GAAAA,OAAAA,CAAAA,EAAAA,GAAAA,GAAAA,IAAAA;EAA4BX,QAAAA,0BAAAA;EACjCA,QAAAA,sBAAAA;EAA2ES,mBAAAA,CAAAA,QAAAA,EANnEE,oBAMmEF,GAN5CC,oBAM4CD,CAAAA,EAAAA,IAAAA;EACtEC,aAAAA,CAAAA,CAAAA,EAAAA,OAAAA;EAA4BT,UAAAA,CAAAA,SAAAA,CAAAA,EALhCM,kBAKgCN,EAAAA,CAAAA,EALTyB,OAKSzB,CAAAA,IAAAA,CAAAA;EACjCA,QAAAA,iBAAAA;EAAwFC,QAAAA,UAAAA;EAAZyB,gBAAAA,CAAAA,QAAAA,EAHvEhB,oBAGuEgB,EAAAA,IAAAA,EAH3C3B,YAG2C2B,CAAAA,EAAAA,IAAAA;EAA8EnB,eAAAA,CAAAA,IAAAA,EAF1JR,YAE0JQ,EAAAA,YAAAA,EAAAA,MAAAA,EAAAA,UAAAA,EAAAA,MAAAA,EAAAA,KAAAA,CAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EAF/EC,gBAE+ED,GAAAA,SAAAA;EAGpKO,gBAAAA,CAAAA,QAAAA,EAJeL,oBAIfK,EAAAA,IAAAA,EAJ2Cd,gBAI3Cc,CAAAA,EAAAA,IAAAA;EAAW,eAAA,CAAA,IAAA,EAHDd,gBAGC,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAH2E0B,GAG3E,CAAA,MAAA,EAHuFzB,mBAGvF,CAAA,GAAA,IAAA,EAAA,yBAAA,CAAA,EAAA,MAAA,CAAA,EAHyJM,gBAGzJ,GAAA,SAAA;;;cAAXO"}
|
|
@@ -19,10 +19,11 @@ import LRUMapPkg from "lru_map";
|
|
|
19
19
|
const IGNORE_RESPONSE = Symbol("IGNORE_RESPONSE");
|
|
20
20
|
var WorkerPoolManager = class {
|
|
21
21
|
highlighter;
|
|
22
|
+
preferredHighlighter;
|
|
22
23
|
renderOptions;
|
|
23
24
|
initialized = false;
|
|
24
25
|
workers = [];
|
|
25
|
-
taskQueue =
|
|
26
|
+
taskQueue = /* @__PURE__ */ new Map();
|
|
26
27
|
pendingTasks = /* @__PURE__ */ new Map();
|
|
27
28
|
nextRequestId = 0;
|
|
28
29
|
themeSubscribers = /* @__PURE__ */ new Set();
|
|
@@ -32,8 +33,9 @@ var WorkerPoolManager = class {
|
|
|
32
33
|
fileCache;
|
|
33
34
|
diffCache;
|
|
34
35
|
_queuedBroadcast;
|
|
35
|
-
constructor(options, { langs, theme = DEFAULT_THEMES, lineDiffType = "word-alt", tokenizeMaxLineLength = 1e3 }) {
|
|
36
|
+
constructor(options, { langs, theme = DEFAULT_THEMES, lineDiffType = "word-alt", tokenizeMaxLineLength = 1e3, preferredHighlighter = "shiki-js" }) {
|
|
36
37
|
this.options = options;
|
|
38
|
+
this.preferredHighlighter = preferredHighlighter;
|
|
37
39
|
this.renderOptions = {
|
|
38
40
|
theme,
|
|
39
41
|
lineDiffType,
|
|
@@ -92,7 +94,8 @@ var WorkerPoolManager = class {
|
|
|
92
94
|
} else {
|
|
93
95
|
const [highlighter] = await Promise.all([getSharedHighlighter({
|
|
94
96
|
themes: themeNames,
|
|
95
|
-
langs: ["text"]
|
|
97
|
+
langs: ["text"],
|
|
98
|
+
preferredHighlighter: this.preferredHighlighter
|
|
96
99
|
}), this.setRenderOptionsOnWorkers(newRenderOptions, resolvedThemes)]);
|
|
97
100
|
this.highlighter = highlighter;
|
|
98
101
|
}
|
|
@@ -173,11 +176,12 @@ var WorkerPoolManager = class {
|
|
|
173
176
|
for (const callback of this.statSubscribers) callback(stats);
|
|
174
177
|
};
|
|
175
178
|
cleanUpPendingTasks(instance) {
|
|
176
|
-
this.taskQueue
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
this.taskQueue.delete(instance);
|
|
180
|
+
const requestId = this.instanceRequestMap.get(instance);
|
|
181
|
+
if (requestId != null) {
|
|
182
|
+
this.pendingTasks.delete(requestId);
|
|
183
|
+
this.instanceRequestMap.delete(instance);
|
|
184
|
+
}
|
|
181
185
|
this.queueBroadcastStateChanges();
|
|
182
186
|
}
|
|
183
187
|
isInitialized() {
|
|
@@ -198,7 +202,8 @@ var WorkerPoolManager = class {
|
|
|
198
202
|
else resolvedLanguages = await resolveLanguages(languages);
|
|
199
203
|
const [highlighter] = await Promise.all([getSharedHighlighter({
|
|
200
204
|
themes,
|
|
201
|
-
langs: ["text", ...languages]
|
|
205
|
+
langs: ["text", ...languages],
|
|
206
|
+
preferredHighlighter: this.preferredHighlighter
|
|
202
207
|
}), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
|
|
203
208
|
if (this.initialized === false) {
|
|
204
209
|
this.terminateWorkers();
|
|
@@ -248,6 +253,7 @@ var WorkerPoolManager = class {
|
|
|
248
253
|
type: "initialize",
|
|
249
254
|
id,
|
|
250
255
|
renderOptions: this.renderOptions,
|
|
256
|
+
preferredHighlighter: this.preferredHighlighter,
|
|
251
257
|
resolvedThemes,
|
|
252
258
|
resolvedLanguages
|
|
253
259
|
},
|
|
@@ -266,14 +272,13 @@ var WorkerPoolManager = class {
|
|
|
266
272
|
}
|
|
267
273
|
drainQueue = () => {
|
|
268
274
|
this._queuedDrain = void 0;
|
|
269
|
-
if (this.initialized !== true || this.taskQueue.
|
|
270
|
-
|
|
271
|
-
|
|
275
|
+
if (this.initialized !== true || this.taskQueue.size === 0) return;
|
|
276
|
+
for (const [instance, task] of this.taskQueue) {
|
|
277
|
+
if (this.instanceRequestMap.has(instance)) continue;
|
|
272
278
|
const langs = getLangsFromTask(task);
|
|
273
279
|
const availableWorker = this.getAvailableWorker(langs);
|
|
274
280
|
if (availableWorker == null) break;
|
|
275
281
|
this.assignWorkerToTask(task, availableWorker);
|
|
276
|
-
this.taskQueue.shift();
|
|
277
282
|
this.resolveLanguagesAndExecuteTask(availableWorker, task, langs);
|
|
278
283
|
}
|
|
279
284
|
this.queueBroadcastStateChanges();
|
|
@@ -286,12 +291,17 @@ var WorkerPoolManager = class {
|
|
|
286
291
|
file
|
|
287
292
|
});
|
|
288
293
|
}
|
|
289
|
-
getPlainFileAST(file) {
|
|
294
|
+
getPlainFileAST(file, startingLine, totalLines, lines) {
|
|
290
295
|
if (this.highlighter == null) {
|
|
291
296
|
this.initialize();
|
|
292
297
|
return;
|
|
293
298
|
}
|
|
294
|
-
return renderFileWithHighlighter(file, this.highlighter, this.renderOptions,
|
|
299
|
+
return renderFileWithHighlighter(file, this.highlighter, this.renderOptions, {
|
|
300
|
+
forcePlainText: true,
|
|
301
|
+
startingLine,
|
|
302
|
+
totalLines,
|
|
303
|
+
lines
|
|
304
|
+
});
|
|
295
305
|
}
|
|
296
306
|
highlightDiffAST(instance, diff) {
|
|
297
307
|
if ((diff.lang ?? getFiletypeFromFileName(diff.name)) === "text") return;
|
|
@@ -301,12 +311,13 @@ var WorkerPoolManager = class {
|
|
|
301
311
|
diff
|
|
302
312
|
});
|
|
303
313
|
}
|
|
304
|
-
getPlainDiffAST(diff, startingLine, totalLines, expandedHunks) {
|
|
314
|
+
getPlainDiffAST(diff, startingLine, totalLines, expandedHunks, collapsedContextThreshold) {
|
|
305
315
|
return this.highlighter != null ? renderDiffWithHighlighter(diff, this.highlighter, this.renderOptions, {
|
|
306
316
|
forcePlainText: true,
|
|
307
317
|
startingLine,
|
|
308
318
|
totalLines,
|
|
309
|
-
expandedHunks
|
|
319
|
+
expandedHunks,
|
|
320
|
+
collapsedContextThreshold
|
|
310
321
|
}) : void 0;
|
|
311
322
|
}
|
|
312
323
|
terminate() {
|
|
@@ -314,7 +325,7 @@ var WorkerPoolManager = class {
|
|
|
314
325
|
this.fileCache.clear();
|
|
315
326
|
this.diffCache.clear();
|
|
316
327
|
this.instanceRequestMap.clear();
|
|
317
|
-
this.taskQueue.
|
|
328
|
+
this.taskQueue.clear();
|
|
318
329
|
this.pendingTasks.clear();
|
|
319
330
|
this.highlighter = void 0;
|
|
320
331
|
this.initialized = false;
|
|
@@ -335,7 +346,7 @@ var WorkerPoolManager = class {
|
|
|
335
346
|
totalWorkers: this.workers.length,
|
|
336
347
|
workersFailed: this.workersFailed,
|
|
337
348
|
busyWorkers: this.workers.filter((w) => w.request_id != null).length,
|
|
338
|
-
queuedTasks: this.taskQueue.
|
|
349
|
+
queuedTasks: this.taskQueue.size,
|
|
339
350
|
pendingTasks: this.pendingTasks.size,
|
|
340
351
|
themeSubscribers: this.themeSubscribers.size,
|
|
341
352
|
fileCacheSize: this.fileCache.size,
|
|
@@ -370,17 +381,18 @@ var WorkerPoolManager = class {
|
|
|
370
381
|
};
|
|
371
382
|
}
|
|
372
383
|
})();
|
|
373
|
-
this.
|
|
374
|
-
this.taskQueue.push(task);
|
|
384
|
+
this.taskQueue.set(instance, task);
|
|
375
385
|
this.queueDrain();
|
|
376
386
|
}
|
|
377
387
|
async resolveLanguagesAndExecuteTask(availableWorker, task, langs) {
|
|
378
|
-
|
|
388
|
+
try {
|
|
379
389
|
const workerMissingLangs = langs.filter((lang) => !availableWorker.langs.has(lang));
|
|
380
390
|
if (workerMissingLangs.length > 0) if (hasResolvedLanguages(workerMissingLangs)) task.request.resolvedLanguages = getResolvedLanguages(workerMissingLangs);
|
|
381
391
|
else task.request.resolvedLanguages = await resolveLanguages(workerMissingLangs);
|
|
392
|
+
this.executeTask(availableWorker, task);
|
|
393
|
+
} catch {
|
|
394
|
+
this.clearWorkerTask(task, availableWorker);
|
|
382
395
|
}
|
|
383
|
-
this.executeTask(availableWorker, task);
|
|
384
396
|
}
|
|
385
397
|
handleWorkerMessage(managedWorker, response) {
|
|
386
398
|
const task = this.pendingTasks.get(response.id);
|
|
@@ -430,11 +442,9 @@ var WorkerPoolManager = class {
|
|
|
430
442
|
} catch (error) {
|
|
431
443
|
if (error !== IGNORE_RESPONSE) console.error(error, task, response);
|
|
432
444
|
}
|
|
433
|
-
if (task != null
|
|
434
|
-
this.pendingTasks.delete(response.id);
|
|
435
|
-
managedWorker.request_id = void 0;
|
|
445
|
+
if (task != null) this.clearWorkerTask(task, managedWorker);
|
|
436
446
|
this.queueBroadcastStateChanges();
|
|
437
|
-
if (this.taskQueue.
|
|
447
|
+
if (this.taskQueue.size > 0) this.queueDrain();
|
|
438
448
|
}
|
|
439
449
|
_queuedDrain;
|
|
440
450
|
queueDrain() {
|
|
@@ -444,16 +454,24 @@ var WorkerPoolManager = class {
|
|
|
444
454
|
}
|
|
445
455
|
assignWorkerToTask(task, managedWorker) {
|
|
446
456
|
managedWorker.request_id = task.id;
|
|
457
|
+
if ("instance" in task) {
|
|
458
|
+
this.taskQueue.delete(task.instance);
|
|
459
|
+
this.instanceRequestMap.set(task.instance, task.id);
|
|
460
|
+
}
|
|
447
461
|
this.pendingTasks.set(task.id, task);
|
|
448
462
|
}
|
|
463
|
+
clearWorkerTask(task, managedWorker) {
|
|
464
|
+
managedWorker.request_id = void 0;
|
|
465
|
+
if ("instance" in task) this.instanceRequestMap.delete(task.instance);
|
|
466
|
+
this.pendingTasks.delete(task.id);
|
|
467
|
+
}
|
|
449
468
|
executeTask(managedWorker, task) {
|
|
450
469
|
this.assignWorkerToTask(task, managedWorker);
|
|
451
470
|
for (const lang of getLangsFromTask(task)) managedWorker.langs.add(lang);
|
|
452
471
|
try {
|
|
453
472
|
managedWorker.worker.postMessage(task.request);
|
|
454
473
|
} catch (error) {
|
|
455
|
-
|
|
456
|
-
this.pendingTasks.delete(task.id);
|
|
474
|
+
this.clearWorkerTask(task, managedWorker);
|
|
457
475
|
console.error("Failed to post message to worker:", error);
|
|
458
476
|
if ("instance" in task) task.instance.onHighlightError(error);
|
|
459
477
|
else if ("reject" in task) task.reject(error);
|