@pierre/diffs 1.3.0-beta.6 → 1.3.0-beta.8

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.
Files changed (180) hide show
  1. package/dist/components/CodeView.d.ts +90 -5
  2. package/dist/components/CodeView.d.ts.map +1 -1
  3. package/dist/components/CodeView.js +291 -38
  4. package/dist/components/CodeView.js.map +1 -1
  5. package/dist/components/File.d.ts +1 -0
  6. package/dist/components/File.d.ts.map +1 -1
  7. package/dist/components/File.js +20 -6
  8. package/dist/components/File.js.map +1 -1
  9. package/dist/components/FileDiff.d.ts +38 -23
  10. package/dist/components/FileDiff.d.ts.map +1 -1
  11. package/dist/components/FileDiff.js +144 -61
  12. package/dist/components/FileDiff.js.map +1 -1
  13. package/dist/components/UnresolvedFile.d.ts +3 -2
  14. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  15. package/dist/components/UnresolvedFile.js +4 -2
  16. package/dist/components/UnresolvedFile.js.map +1 -1
  17. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  18. package/dist/components/VirtualizedFile.js +6 -8
  19. package/dist/components/VirtualizedFile.js.map +1 -1
  20. package/dist/components/VirtualizedFileDiff.d.ts +13 -5
  21. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  22. package/dist/components/VirtualizedFileDiff.js +192 -55
  23. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  24. package/dist/components/Virtualizer.d.ts +2 -0
  25. package/dist/components/Virtualizer.d.ts.map +1 -1
  26. package/dist/components/Virtualizer.js +16 -3
  27. package/dist/components/Virtualizer.js.map +1 -1
  28. package/dist/constants.d.ts +3 -1
  29. package/dist/constants.d.ts.map +1 -1
  30. package/dist/constants.js +3 -1
  31. package/dist/constants.js.map +1 -1
  32. package/dist/editor/command.d.ts +1 -1
  33. package/dist/editor/command.d.ts.map +1 -1
  34. package/dist/editor/command.js +8 -0
  35. package/dist/editor/command.js.map +1 -1
  36. package/dist/editor/editor.d.ts +10 -3
  37. package/dist/editor/editor.d.ts.map +1 -1
  38. package/dist/editor/editor.js +325 -135
  39. package/dist/editor/editor.js.map +1 -1
  40. package/dist/editor/editor2.js +1 -1
  41. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  42. package/dist/editor/lineAnnotations.js +84 -12
  43. package/dist/editor/lineAnnotations.js.map +1 -1
  44. package/dist/editor/marker.d.ts +5 -3
  45. package/dist/editor/marker.d.ts.map +1 -1
  46. package/dist/editor/marker.js +35 -12
  47. package/dist/editor/marker.js.map +1 -1
  48. package/dist/editor/matchBrackets.d.ts +8 -0
  49. package/dist/editor/matchBrackets.d.ts.map +1 -0
  50. package/dist/editor/matchBrackets.js +146 -0
  51. package/dist/editor/matchBrackets.js.map +1 -0
  52. package/dist/editor/popover.d.ts +45 -0
  53. package/dist/editor/popover.d.ts.map +1 -0
  54. package/dist/editor/popover.js +145 -0
  55. package/dist/editor/popover.js.map +1 -0
  56. package/dist/editor/selection.d.ts +14 -2
  57. package/dist/editor/selection.d.ts.map +1 -1
  58. package/dist/editor/selection.js +142 -41
  59. package/dist/editor/selection.js.map +1 -1
  60. package/dist/editor/selectionAction.d.ts +20 -3
  61. package/dist/editor/selectionAction.d.ts.map +1 -1
  62. package/dist/editor/selectionAction.js +41 -10
  63. package/dist/editor/selectionAction.js.map +1 -1
  64. package/dist/editor/textDocument.d.ts +2 -0
  65. package/dist/editor/textDocument.d.ts.map +1 -1
  66. package/dist/editor/textDocument.js +22 -6
  67. package/dist/editor/textDocument.js.map +1 -1
  68. package/dist/editor/textMeasure.d.ts.map +1 -1
  69. package/dist/editor/textMeasure.js +25 -7
  70. package/dist/editor/textMeasure.js.map +1 -1
  71. package/dist/editor/tokenzier.d.ts +6 -7
  72. package/dist/editor/tokenzier.d.ts.map +1 -1
  73. package/dist/editor/tokenzier.js +83 -34
  74. package/dist/editor/tokenzier.js.map +1 -1
  75. package/dist/editor/utils.d.ts +3 -1
  76. package/dist/editor/utils.d.ts.map +1 -1
  77. package/dist/editor/utils.js +14 -1
  78. package/dist/editor/utils.js.map +1 -1
  79. package/dist/index.d.ts +9 -7
  80. package/dist/index.js +6 -4
  81. package/dist/managers/InteractionManager.d.ts.map +1 -1
  82. package/dist/managers/InteractionManager.js +0 -1
  83. package/dist/managers/InteractionManager.js.map +1 -1
  84. package/dist/managers/ResizeManager.d.ts +10 -2
  85. package/dist/managers/ResizeManager.d.ts.map +1 -1
  86. package/dist/managers/ResizeManager.js +33 -13
  87. package/dist/managers/ResizeManager.js.map +1 -1
  88. package/dist/react/CodeView.d.ts +25 -1
  89. package/dist/react/CodeView.d.ts.map +1 -1
  90. package/dist/react/CodeView.js +76 -17
  91. package/dist/react/CodeView.js.map +1 -1
  92. package/dist/react/EditorContext.d.ts +2 -2
  93. package/dist/react/EditorContext.d.ts.map +1 -1
  94. package/dist/react/EditorContext.js.map +1 -1
  95. package/dist/react/MultiFileDiff.d.ts +3 -4
  96. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  97. package/dist/react/MultiFileDiff.js.map +1 -1
  98. package/dist/react/index.d.ts +2 -2
  99. package/dist/react/utils/useFileDiffInstance.js +14 -15
  100. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  101. package/dist/renderers/DiffHunksRenderer.d.ts +2 -2
  102. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  103. package/dist/renderers/DiffHunksRenderer.js +45 -23
  104. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  105. package/dist/renderers/FileRenderer.d.ts +2 -1
  106. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  107. package/dist/renderers/FileRenderer.js +58 -38
  108. package/dist/renderers/FileRenderer.js.map +1 -1
  109. package/dist/ssr/index.d.ts +2 -2
  110. package/dist/ssr/preloadDiffs.d.ts +11 -10
  111. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  112. package/dist/ssr/preloadDiffs.js +14 -6
  113. package/dist/ssr/preloadDiffs.js.map +1 -1
  114. package/dist/types.d.ts +100 -6
  115. package/dist/types.d.ts.map +1 -1
  116. package/dist/utils/applyLineTextWithNewline.d.ts +5 -0
  117. package/dist/utils/applyLineTextWithNewline.d.ts.map +1 -0
  118. package/dist/utils/applyLineTextWithNewline.js +11 -0
  119. package/dist/utils/applyLineTextWithNewline.js.map +1 -0
  120. package/dist/utils/areHunkDataEqual.js +1 -1
  121. package/dist/utils/areHunkDataEqual.js.map +1 -1
  122. package/dist/utils/areManagedSnapshotsEqual.d.ts +2 -2
  123. package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  124. package/dist/utils/areManagedSnapshotsEqual.js +5 -0
  125. package/dist/utils/areManagedSnapshotsEqual.js.map +1 -1
  126. package/dist/utils/awaitWithTimeout.d.ts +5 -0
  127. package/dist/utils/awaitWithTimeout.d.ts.map +1 -0
  128. package/dist/utils/awaitWithTimeout.js +15 -0
  129. package/dist/utils/awaitWithTimeout.js.map +1 -0
  130. package/dist/utils/cloneFileDiffMetadata.d.ts +7 -0
  131. package/dist/utils/cloneFileDiffMetadata.d.ts.map +1 -0
  132. package/dist/utils/cloneFileDiffMetadata.js +16 -0
  133. package/dist/utils/cloneFileDiffMetadata.js.map +1 -0
  134. package/dist/utils/computeEstimatedDiffHeights.d.ts +3 -1
  135. package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  136. package/dist/utils/computeEstimatedDiffHeights.js +8 -1
  137. package/dist/utils/computeEstimatedDiffHeights.js.map +1 -1
  138. package/dist/utils/createCodeViewHeaderFooterHostElement.d.ts +5 -0
  139. package/dist/utils/createCodeViewHeaderFooterHostElement.d.ts.map +1 -0
  140. package/dist/utils/createCodeViewHeaderFooterHostElement.js +19 -0
  141. package/dist/utils/createCodeViewHeaderFooterHostElement.js.map +1 -0
  142. package/dist/utils/createPreElement.js +0 -1
  143. package/dist/utils/createPreElement.js.map +1 -1
  144. package/dist/utils/getDiffFileInput.d.ts +14 -0
  145. package/dist/utils/getDiffFileInput.d.ts.map +1 -0
  146. package/dist/utils/getDiffFileInput.js +24 -0
  147. package/dist/utils/getDiffFileInput.js.map +1 -0
  148. package/dist/utils/getDiffHunksRendererOptions.js +1 -0
  149. package/dist/utils/getDiffHunksRendererOptions.js.map +1 -1
  150. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  151. package/dist/utils/getFiletypeFromFileName.js +2 -0
  152. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  153. package/dist/utils/hydratePartialDiff.d.ts +10 -0
  154. package/dist/utils/hydratePartialDiff.d.ts.map +1 -0
  155. package/dist/utils/hydratePartialDiff.js +140 -0
  156. package/dist/utils/hydratePartialDiff.js.map +1 -0
  157. package/dist/utils/iterateOverDiff.js +3 -3
  158. package/dist/utils/iterateOverDiff.js.map +1 -1
  159. package/dist/utils/parseDiffFromFile.d.ts +1 -1
  160. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  161. package/dist/utils/parseDiffFromFile.js +26 -5
  162. package/dist/utils/parseDiffFromFile.js.map +1 -1
  163. package/dist/utils/setWrapperNodeProps.js +0 -1
  164. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  165. package/dist/utils/updateDiffHunks.d.ts +5 -1
  166. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  167. package/dist/utils/updateDiffHunks.js +48 -4
  168. package/dist/utils/updateDiffHunks.js.map +1 -1
  169. package/dist/worker/WorkerPoolManager.d.ts +7 -2
  170. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  171. package/dist/worker/WorkerPoolManager.js +78 -15
  172. package/dist/worker/WorkerPoolManager.js.map +1 -1
  173. package/dist/worker/index.d.ts +2 -2
  174. package/dist/worker/types.d.ts +7 -1
  175. package/dist/worker/types.d.ts.map +1 -1
  176. package/dist/worker/worker-portable.js +5 -3
  177. package/dist/worker/worker-portable.js.map +1 -1
  178. package/dist/worker/worker.js +5 -3
  179. package/dist/worker/worker.js.map +1 -1
  180. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FileRenderer.js","names":[],"sources":["../../src/renderers/FileRenderer.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n DEFAULT_RENDER_RANGE,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n} from '../constants';\nimport { areLanguagesAttached } from '../highlighter/languages/areLanguagesAttached';\nimport {\n getHighlighterIfLoaded,\n getSharedHighlighter,\n} from '../highlighter/shared_highlighter';\nimport { areThemesAttached } from '../highlighter/themes/areThemesAttached';\nimport { hasResolvedThemes } from '../highlighter/themes/hasResolvedThemes';\nimport type {\n BaseCodeOptions,\n DiffsHighlighter,\n DiffsTextDocument,\n FileContents,\n FileHeaderRenderMode,\n HighlightedToken,\n LineAnnotation,\n RenderedFileASTCache,\n RenderFileOptions,\n RenderFileResult,\n RenderRange,\n SupportedLanguages,\n ThemedFileResult,\n} from '../types';\nimport { areFileRenderOptionsEqual } from '../utils/areFileRenderOptionsEqual';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { linesFromFileContents } from '../utils/computeFileOffsets';\nimport { createAnnotationElement } from '../utils/createAnnotationElement';\nimport { createContentColumn } from '../utils/createContentColumn';\nimport { createFileHeaderElement } from '../utils/createFileHeaderElement';\nimport { createPreElement } from '../utils/createPreElement';\nimport { getFiletypeFromFileName } from '../utils/getFiletypeFromFileName';\nimport { getHighlighterOptions } from '../utils/getHighlighterOptions';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getThemes } from '../utils/getThemes';\nimport {\n createGutterGap,\n createGutterItem,\n createGutterWrapper,\n createHastElement,\n} from '../utils/hast_utils';\nimport {\n FILE_ANNOTATION_HUNK_INDEX,\n FILE_ANNOTATION_LINE_INDEX,\n getFileAnnotations,\n shouldRenderFileAnnotations,\n} from '../utils/includesFileAnnotations';\nimport { isFilePlainText } from '../utils/isFilePlainText';\nimport { renderFileWithHighlighter } from '../utils/renderFileWithHighlighter';\nimport { shouldUseTokenTransformer } from '../utils/shouldUseTokenTransformer';\nimport type { WorkerPoolManager } from '../worker';\n\ntype AnnotationLineMap<LAnnotation> = Record<\n number,\n LineAnnotation<LAnnotation>[] | undefined\n>;\n\ninterface GetRenderOptionsReturn {\n options: RenderFileOptions;\n forceHighlight: boolean;\n}\n\nexport interface FileRenderResult {\n gutterAST: ElementContent[];\n contentAST: ElementContent[];\n preAST: HASTElement;\n headerAST: HASTElement | undefined;\n css: string;\n totalLines: number;\n themeStyles: string;\n baseThemeType: 'light' | 'dark' | undefined;\n rowCount: number;\n bufferBefore: number;\n bufferAfter: number;\n}\n\ninterface LineCache {\n cacheKey: string | undefined;\n lines: string[];\n}\n\nexport interface FileRendererOptions extends BaseCodeOptions {\n headerRenderMode?: FileHeaderRenderMode;\n}\n\nlet instanceId = -1;\n\nexport class FileRenderer<LAnnotation = undefined> {\n readonly __id: string = `file-renderer:${++instanceId}`;\n\n private highlighter: DiffsHighlighter | undefined;\n private renderCache: RenderedFileASTCache | undefined;\n private computedLang: SupportedLanguages = 'text';\n private lineAnnotations: AnnotationLineMap<LAnnotation> = {};\n private lineCache: LineCache | undefined;\n private textDoucmentCache = new WeakMap<FileContents, DiffsTextDocument>();\n\n constructor(\n public options: FileRendererOptions = { theme: DEFAULT_THEMES },\n private onRenderUpdate?: () => unknown,\n private workerManager?: WorkerPoolManager | undefined\n ) {\n if (workerManager?.isWorkingPool() !== true) {\n this.highlighter = areThemesAttached(options.theme ?? DEFAULT_THEMES)\n ? getHighlighterIfLoaded()\n : undefined;\n }\n }\n\n public setOptions(options: FileRendererOptions): void {\n this.options = options;\n }\n\n public mergeOptions(options: Partial<FileRendererOptions>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setLineAnnotations(\n lineAnnotations: LineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = {};\n for (const annotation of lineAnnotations) {\n const arr = this.lineAnnotations[annotation.lineNumber] ?? [];\n this.lineAnnotations[annotation.lineNumber] = arr;\n arr.push(annotation);\n }\n }\n\n public cleanUp(): void {\n this.recycle();\n this.workerManager = undefined;\n this.onRenderUpdate = undefined;\n }\n\n public recycle(): void {\n this.clearRenderCache();\n this.highlighter = undefined;\n this.workerManager?.cleanUpTasks(this);\n this.lineCache = undefined;\n }\n\n public clearRenderCache(): void {\n const renderCache = this.renderCache;\n this.renderCache = undefined;\n if (\n renderCache != null &&\n renderCache.isDirty === true &&\n renderCache.file.cacheKey != null\n ) {\n // The render cache has been updated by the editor, let's purge it\n // from the worker manager cache.\n this.workerManager?.evictFileFromCache(renderCache.file.cacheKey);\n }\n }\n\n public hydrate(file: FileContents): void {\n const { options } = this.getRenderOptions(file);\n const lines = this.getOrCreateLineCache(file);\n const massiveFile = isFileMassive(\n lines.length,\n this.getTokenizeMaxLength()\n );\n let cache = this.workerManager?.getFileResultCache(file);\n if (cache != null && !areFileRenderOptionsEqual(options, cache.options)) {\n cache = undefined;\n }\n this.renderCache ??= {\n file,\n options,\n highlighted: !massiveFile && !isFilePlainText(file),\n result: massiveFile ? undefined : cache?.result,\n // FIXME(amadeus): Add support for renderRanges\n renderRange: undefined,\n };\n if (this.workerManager?.isWorkingPool() === true) {\n if (this.renderCache.result == null && !massiveFile) {\n // We should only kick off a preload of the AST if we have a WorkerPool\n this.workerManager.highlightFileAST(this, file);\n }\n }\n // Lets attempt to get the highlighter/languages ready immediately\n else if (this.highlighter == null) {\n this.computedLang = file.lang ?? getFiletypeFromFileName(file.name);\n void this.initializeHighlighter();\n }\n }\n\n private getRenderOptions(file: FileContents): GetRenderOptionsReturn {\n const options: RenderFileOptions = (() => {\n if (this.workerManager?.isWorkingPool() === true) {\n return this.workerManager.getFileRenderOptions();\n }\n const { theme = DEFAULT_THEMES, tokenizeMaxLineLength = 1000 } =\n this.options;\n return {\n theme,\n useTokenTransformer: shouldUseTokenTransformer(this.options),\n tokenizeMaxLineLength,\n };\n })();\n const { renderCache } = this;\n if (renderCache?.result == null) {\n return { options, forceHighlight: true };\n }\n if (\n !areFilesEqual(file, renderCache.file) ||\n !areFileRenderOptionsEqual(options, renderCache.options)\n ) {\n return { options, forceHighlight: true };\n }\n return { options, forceHighlight: false };\n }\n\n public getOrCreateLineCache(file: FileContents): string[] {\n // Uncached files will get split every time, not the greatest experience\n // tbh... but something people should try to optimize away\n if (file.cacheKey == null) {\n this.lineCache = undefined;\n return linesFromFileContents(file.contents);\n }\n\n let { lineCache } = this;\n if (lineCache == null || lineCache.cacheKey !== file.cacheKey) {\n lineCache = {\n cacheKey: file.cacheKey,\n lines: linesFromFileContents(file.contents),\n };\n }\n this.lineCache = lineCache;\n return lineCache.lines;\n }\n\n // when a emitLineCountChange is called,\n // calculate the line count using the cached text document\n public getLineCount(file: FileContents): number {\n return (\n this.textDoucmentCache.get(file)?.lineCount ??\n this.getOrCreateLineCache(file).length\n );\n }\n\n public updateRenderCache(\n dirtyLines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ): void {\n if (this.renderCache == null) {\n return;\n }\n const { result } = this.renderCache;\n if (result == null) {\n return;\n }\n for (const [line, tokens] of dirtyLines) {\n result.code[line] = {\n type: 'element',\n tagName: 'div',\n properties: {\n 'data-line': line + 1,\n 'data-line-type': 'context',\n 'data-line-index': line,\n },\n children: tokens.map(([char, fg, text]) => {\n if (char === 0 && fg === '') {\n if (text === '') {\n return {\n type: 'element',\n tagName: 'br',\n properties: {},\n children: [],\n };\n }\n return { type: 'text', value: text };\n }\n return {\n type: 'element',\n tagName: 'span',\n properties: {\n 'data-char': char,\n style: `--diffs-token-${themeType}:${fg};`,\n },\n children: [{ type: 'text', value: text }],\n };\n }),\n };\n }\n\n result.baseThemeType = themeType;\n this.renderCache.isDirty = true;\n }\n\n // normally triggered by the editor when the document line count changes\n public applyDocumentChange(textDocument: DiffsTextDocument): void {\n if (this.renderCache == null) {\n return undefined;\n }\n const { file, result } = this.renderCache;\n if (result != null && result.code.length !== textDocument.lineCount) {\n result.code.length = Math.min(result.code.length, textDocument.lineCount);\n for (let i = result.code.length; i < textDocument.lineCount; i++) {\n // prefill lines with plain text content\n result.code.push({\n type: 'element',\n tagName: 'div',\n properties: {\n 'data-line': i + 1,\n 'data-line-type': 'context',\n 'data-line-index': i,\n },\n children: [\n {\n type: 'element',\n tagName: 'span',\n properties: {\n 'data-char': 0,\n },\n children: [\n {\n type: 'text',\n value: textDocument.getLineText(i),\n },\n ],\n },\n ],\n });\n }\n this.renderCache.isDirty = true;\n }\n this.textDoucmentCache.set(file, textDocument);\n }\n\n public renderFile(\n file: FileContents | undefined = this.renderCache?.file,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): FileRenderResult | undefined {\n if (file == null) {\n return undefined;\n }\n let { options, forceHighlight } = this.getRenderOptions(file);\n const cache = this.getMatchingWorkerResultCache(file, options);\n if (cache != null && !this.hasHighlightedRenderCache(file, options)) {\n this.renderCache = {\n file,\n highlighted: true,\n renderRange: undefined,\n ...cache,\n };\n forceHighlight = false;\n }\n this.renderCache ??= {\n file,\n highlighted: false,\n options,\n result: undefined,\n renderRange: undefined,\n };\n const lines = this.getOrCreateLineCache(file);\n const hasContent = file.contents.length > 0;\n const forcePlainText =\n !hasContent ||\n isFilePlainText(file) ||\n isFileMassive(lines.length, this.getTokenizeMaxLength());\n const newContent = !areFilesEqual(file, this.renderCache.file);\n const newRenderRange = !areRenderRangesEqual(\n this.renderCache.renderRange,\n renderRange\n );\n if (this.workerManager?.isWorkingPool() === true) {\n // Cache invalidation based on renderRange comparison\n if (\n forcePlainText ||\n this.renderCache.result == null ||\n (!this.renderCache.highlighted && (newContent || newRenderRange))\n ) {\n this.renderCache.file = file;\n this.renderCache.options = options;\n this.renderCache.highlighted = false;\n if (\n this.renderCache.result == null ||\n newContent ||\n newRenderRange ||\n forceHighlight\n ) {\n this.renderCache.result = this.workerManager.getPlainFileAST(\n file,\n renderRange.startingLine,\n renderRange.totalLines,\n lines\n );\n }\n this.renderCache.renderRange = renderRange;\n }\n\n if (\n !forcePlainText &&\n hasContent &&\n (!this.renderCache.highlighted || forceHighlight)\n ) {\n this.workerManager.highlightFileAST(this, file);\n }\n } else {\n this.computedLang = file.lang ?? getFiletypeFromFileName(file.name);\n const hasThemes =\n this.highlighter != null && areThemesAttached(options.theme);\n const hasLangs =\n this.highlighter != null && areLanguagesAttached(this.computedLang);\n const canHighlight = !forcePlainText && hasLangs;\n\n // If we have any semblance of a highlighter with the correct theme(s)\n // attached, we can kick off some form of rendering. If we don't have\n // the correct language, then we can render plain text and after kick off\n // an async job to get the highlighted AST\n if (\n this.highlighter != null &&\n hasThemes &&\n (forceHighlight ||\n forcePlainText ||\n (!this.renderCache.highlighted && canHighlight) ||\n this.renderCache.result == null)\n ) {\n const { result, options } = this.renderFileWithHighlighter(\n file,\n this.highlighter,\n forcePlainText || !hasLangs\n );\n this.renderCache = {\n file,\n options,\n highlighted: canHighlight,\n result,\n renderRange: undefined,\n };\n }\n\n // If we get in here it means we'll have to kick off an async highlight\n // process which will involve initializing the highlighter with new themes\n // and languages\n if (!hasThemes || (!forcePlainText && !hasLangs)) {\n void this.asyncHighlight(file).then(({ result, options }) => {\n // In this case we need to force a re-render, so we can do that by\n // reaching into renderCache\n if (this.renderCache != null) {\n this.renderCache.highlighted = false;\n }\n this.onHighlightSuccess(file, result, options, !forcePlainText);\n });\n }\n }\n\n return this.renderCache.result != null\n ? this.processFileResult(\n this.renderCache.file,\n renderRange,\n this.renderCache.result\n )\n : undefined;\n }\n\n async asyncRender(\n file: FileContents,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): Promise<FileRenderResult> {\n const { result } = await this.asyncHighlight(file);\n return this.processFileResult(file, renderRange, result);\n }\n\n private async asyncHighlight(file: FileContents): Promise<RenderFileResult> {\n const lines = this.getOrCreateLineCache(file);\n const forcePlainText = isFileMassive(\n lines.length,\n this.getTokenizeMaxLength()\n );\n this.computedLang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const hasThemes =\n this.highlighter != null &&\n hasResolvedThemes(getThemes(this.options.theme));\n const hasLangs =\n forcePlainText ||\n (this.highlighter != null && areLanguagesAttached(this.computedLang));\n // If we don't have the required langs or themes, then we need to\n // initialize the highlighter to load the appropriate languages and themes\n if (this.highlighter == null || !hasThemes || !hasLangs) {\n this.highlighter = await this.initializeHighlighter();\n }\n return this.renderFileWithHighlighter(\n file,\n this.highlighter,\n forcePlainText\n );\n }\n\n private renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n forcePlainText = false\n ): RenderFileResult {\n const { options } = this.getRenderOptions(file);\n const result = renderFileWithHighlighter(file, highlighter, options, {\n forcePlainText,\n });\n return { result, options };\n }\n\n private processFileResult(\n file: FileContents,\n renderRange: RenderRange,\n { code, themeStyles, baseThemeType }: ThemedFileResult\n ): FileRenderResult {\n const totalLines = this.getLineCount(file);\n const { disableFileHeader = false } = this.options;\n const contentArray: ElementContent[] = [];\n const gutter = createGutterWrapper();\n const endLine = Math.min(\n renderRange.startingLine + renderRange.totalLines,\n totalLines\n );\n let rowCount = 0;\n\n const fileLevelAnnotations = shouldRenderFileAnnotations(renderRange)\n ? getFileAnnotations(this.lineAnnotations)\n : undefined;\n if (fileLevelAnnotations != null) {\n gutter.children.push(createGutterGap('context', 'annotation', 1));\n contentArray.push(\n createAnnotationElement({\n type: 'annotation',\n hunkIndex: FILE_ANNOTATION_HUNK_INDEX,\n lineIndex: FILE_ANNOTATION_LINE_INDEX,\n annotations: fileLevelAnnotations.map((annotation) =>\n getLineAnnotationName(annotation)\n ),\n })\n );\n rowCount++;\n }\n\n for (\n let lineIndex = renderRange.startingLine;\n lineIndex < endLine;\n lineIndex++\n ) {\n const lineNumber = lineIndex + 1;\n\n // Sparse array - directly indexed by lineIndex\n const line = code[lineIndex];\n if (line == null) {\n const message = 'FileRenderer.processFileResult: Line doesnt exist';\n console.error(message, {\n name: file.name,\n lineIndex,\n lineNumber,\n });\n throw new Error(message);\n }\n\n // Add gutter line number\n gutter.children.push(\n createGutterItem('context', lineNumber, `${lineIndex}`)\n );\n contentArray.push(line);\n rowCount++;\n\n // Check annotations using ACTUAL line number from file\n const annotations = this.lineAnnotations[lineNumber];\n if (annotations != null) {\n gutter.children.push(createGutterGap('context', 'annotation', 1));\n contentArray.push(\n createAnnotationElement({\n type: 'annotation',\n hunkIndex: 0,\n lineIndex: lineNumber,\n annotations: annotations.map((annotation) =>\n getLineAnnotationName(annotation)\n ),\n })\n );\n rowCount++;\n }\n }\n\n // Finalize: wrap gutter and content\n gutter.properties.style = `grid-row: span ${rowCount}`;\n return {\n gutterAST: gutter.children ?? [],\n contentAST: contentArray,\n preAST: this.createPreElement(totalLines),\n headerAST: !disableFileHeader ? this.renderHeader(file) : undefined,\n totalLines: totalLines,\n rowCount,\n themeStyles: themeStyles,\n baseThemeType,\n bufferBefore: renderRange.bufferBefore,\n bufferAfter: renderRange.bufferAfter,\n css: '',\n };\n }\n\n private renderHeader(file: FileContents) {\n const { headerRenderMode = 'default', stickyHeader = false } = this.options;\n return createFileHeaderElement({\n fileOrDiff: file,\n mode: headerRenderMode,\n stickyHeader,\n });\n }\n\n public renderFullHTML(result: FileRenderResult): string {\n return toHtml(this.renderFullAST(result));\n }\n\n public renderFullAST(\n result: FileRenderResult,\n children: ElementContent[] = []\n ): HASTElement {\n children.push(\n createHastElement({\n tagName: 'code',\n children: this.renderCodeAST(result),\n properties: { 'data-code': '' },\n })\n );\n return { ...result.preAST, children };\n }\n\n public renderCodeAST(result: FileRenderResult): ElementContent[] {\n const gutter = createGutterWrapper();\n gutter.children = result.gutterAST;\n gutter.properties.style = `grid-row: span ${result.rowCount}`;\n const contentColumn = createContentColumn(\n result.contentAST,\n result.rowCount\n );\n return [gutter, contentColumn];\n }\n\n public renderPartialHTML(\n children: ElementContent[],\n includeCodeNode: boolean = false\n ): string {\n if (!includeCodeNode) {\n return toHtml(children);\n }\n return toHtml(\n createHastElement({\n tagName: 'code',\n children,\n properties: { 'data-code': '' },\n })\n );\n }\n\n public async initializeHighlighter(): Promise<DiffsHighlighter> {\n this.highlighter = await getSharedHighlighter(\n getHighlighterOptions(this.computedLang, this.options)\n );\n return this.highlighter;\n }\n\n public onHighlightSuccess(\n file: FileContents,\n result: ThemedFileResult,\n options: RenderFileOptions,\n highlighted = true\n ): void {\n if (this.renderCache == null) {\n return;\n }\n const triggerRenderUpdate =\n !areFilesEqual(file, this.renderCache.file) ||\n !this.renderCache.highlighted ||\n !areFileRenderOptionsEqual(options, this.renderCache.options);\n\n this.renderCache = {\n file,\n options,\n highlighted,\n result,\n renderRange: undefined,\n };\n\n if (triggerRenderUpdate) {\n this.onRenderUpdate?.();\n }\n }\n\n private getMatchingWorkerResultCache(\n file: FileContents,\n options: RenderFileOptions\n ): RenderFileResult | undefined {\n const cache = this.workerManager?.getFileResultCache(file);\n if (cache == null || !areFileRenderOptionsEqual(options, cache.options)) {\n return undefined;\n }\n return cache;\n }\n\n private hasHighlightedRenderCache(\n file: FileContents,\n options: RenderFileOptions\n ): boolean {\n const { renderCache } = this;\n return (\n renderCache?.result != null &&\n renderCache.highlighted &&\n areFilesEqual(file, renderCache.file) &&\n areFileRenderOptionsEqual(options, renderCache.options)\n );\n }\n\n public onHighlightError(error: unknown): void {\n console.error(error);\n }\n\n private getTokenizeMaxLength(): number {\n return this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH;\n }\n\n private createPreElement(totalLines: number): HASTElement {\n const { disableLineNumbers = false, overflow = 'scroll' } = this.options;\n return createPreElement({\n type: 'file',\n diffIndicators: 'none',\n disableBackground: true,\n disableLineNumbers,\n overflow,\n split: false,\n totalLines,\n });\n }\n}\n\nfunction isFileMassive(lineCount: number, tokenizeMaxLength: number): boolean {\n return lineCount > tokenizeMaxLength;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FileRenderer.js","names":[],"sources":["../../src/renderers/FileRenderer.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n DEFAULT_RENDER_RANGE,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n} from '../constants';\nimport { areLanguagesAttached } from '../highlighter/languages/areLanguagesAttached';\nimport {\n getHighlighterIfLoaded,\n getSharedHighlighter,\n} from '../highlighter/shared_highlighter';\nimport { areThemesAttached } from '../highlighter/themes/areThemesAttached';\nimport { hasResolvedThemes } from '../highlighter/themes/hasResolvedThemes';\nimport type {\n BaseCodeOptions,\n DiffsHighlighter,\n DiffsTextDocument,\n FileContents,\n FileHeaderRenderMode,\n HighlightedToken,\n LineAnnotation,\n RenderedFileASTCache,\n RenderFileOptions,\n RenderFileResult,\n RenderRange,\n SupportedLanguages,\n ThemedFileResult,\n} from '../types';\nimport { applyLineTextWithNewline } from '../utils/applyLineTextWithNewline';\nimport { areFileRenderOptionsEqual } from '../utils/areFileRenderOptionsEqual';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { linesFromFileContents } from '../utils/computeFileOffsets';\nimport { createAnnotationElement } from '../utils/createAnnotationElement';\nimport { createContentColumn } from '../utils/createContentColumn';\nimport { createFileHeaderElement } from '../utils/createFileHeaderElement';\nimport { createPreElement } from '../utils/createPreElement';\nimport { getFiletypeFromFileName } from '../utils/getFiletypeFromFileName';\nimport { getHighlighterOptions } from '../utils/getHighlighterOptions';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getThemes } from '../utils/getThemes';\nimport {\n createGutterGap,\n createGutterItem,\n createGutterWrapper,\n createHastElement,\n} from '../utils/hast_utils';\nimport {\n FILE_ANNOTATION_HUNK_INDEX,\n FILE_ANNOTATION_LINE_INDEX,\n getFileAnnotations,\n shouldRenderFileAnnotations,\n} from '../utils/includesFileAnnotations';\nimport { isFilePlainText } from '../utils/isFilePlainText';\nimport { renderFileWithHighlighter } from '../utils/renderFileWithHighlighter';\nimport { shouldUseTokenTransformer } from '../utils/shouldUseTokenTransformer';\nimport type { WorkerPoolManager } from '../worker';\n\ntype AnnotationLineMap<LAnnotation> = Record<\n number,\n LineAnnotation<LAnnotation>[] | undefined\n>;\n\ninterface GetRenderOptionsReturn {\n options: RenderFileOptions;\n forceHighlight: boolean;\n}\n\nexport interface FileRenderResult {\n gutterAST: ElementContent[];\n contentAST: ElementContent[];\n preAST: HASTElement;\n headerAST: HASTElement | undefined;\n css: string;\n totalLines: number;\n themeStyles: string;\n baseThemeType: 'light' | 'dark' | undefined;\n rowCount: number;\n bufferBefore: number;\n bufferAfter: number;\n}\n\ninterface LineCache {\n cacheKey: string | undefined;\n lines: string[];\n}\n\nexport interface FileRendererOptions extends BaseCodeOptions {\n headerRenderMode?: FileHeaderRenderMode;\n}\n\nlet instanceId = -1;\n\nexport class FileRenderer<LAnnotation = undefined> {\n readonly __id: string = `file-renderer:${++instanceId}`;\n\n private highlighter: DiffsHighlighter | undefined;\n private renderCache: RenderedFileASTCache | undefined;\n private computedLang: SupportedLanguages = 'text';\n private lineAnnotations: AnnotationLineMap<LAnnotation> = {};\n private lineCache: LineCache | undefined;\n private textDocumentCache = new WeakMap<FileContents, DiffsTextDocument>();\n\n constructor(\n public options: FileRendererOptions = { theme: DEFAULT_THEMES },\n private onRenderUpdate?: () => unknown,\n private workerManager?: WorkerPoolManager | undefined\n ) {\n if (workerManager?.isWorkingPool() !== true) {\n this.highlighter = areThemesAttached(options.theme ?? DEFAULT_THEMES)\n ? getHighlighterIfLoaded()\n : undefined;\n }\n }\n\n public setOptions(options: FileRendererOptions): void {\n this.options = options;\n }\n\n public mergeOptions(options: Partial<FileRendererOptions>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setLineAnnotations(\n lineAnnotations: LineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = {};\n for (const annotation of lineAnnotations) {\n const arr = this.lineAnnotations[annotation.lineNumber] ?? [];\n this.lineAnnotations[annotation.lineNumber] = arr;\n arr.push(annotation);\n }\n }\n\n public cleanUp(): void {\n this.recycle();\n this.workerManager = undefined;\n this.onRenderUpdate = undefined;\n }\n\n public recycle(): void {\n this.syncEditedContentsToFile();\n this.clearRenderCache();\n this.highlighter = undefined;\n this.workerManager?.cleanUpTasks(this);\n this.lineCache = undefined;\n // The edited-document cache is only coherent alongside the render cache\n // it patched. Keeping it across a recycle would let getLineCount report\n // editor-session line counts (keyed by the long-lived file object) against\n // a result rebuilt from the file's own contents, which processFileResult\n // treats as a missing-line error.\n this.textDocumentCache = new WeakMap();\n }\n\n // An edit session patches the render caches in place but never rewrites\n // `file.contents`, so a recycled host would otherwise rebuild from the\n // pre-edit text while the editor resumes its retained (edited) document.\n // Diffs don't have this problem because DiffHunksRenderer keeps\n // `diff.additionLines` in sync during the session; the file equivalent is\n // joining the session-synced line cache back into the file object before\n // the caches are dropped.\n private syncEditedContentsToFile(): void {\n const { renderCache, lineCache } = this;\n if (\n renderCache?.isDirty !== true ||\n lineCache == null ||\n renderCache.file.cacheKey == null ||\n renderCache.file.cacheKey !== lineCache.cacheKey\n ) {\n return;\n }\n renderCache.file.contents = lineCache.lines.join('');\n }\n\n public clearRenderCache(): void {\n const renderCache = this.renderCache;\n this.renderCache = undefined;\n if (\n renderCache != null &&\n renderCache.isDirty === true &&\n renderCache.file.cacheKey != null\n ) {\n // The render cache has been updated by the host, let's purge it\n // from the worker manager cache.\n this.workerManager?.evictFileFromCache(renderCache.file.cacheKey);\n }\n }\n\n public hydrate(file: FileContents): void {\n const { options } = this.getRenderOptions(file);\n const lines = this.getOrCreateLineCache(file);\n const massiveFile = isFileMassive(\n lines.length,\n this.getTokenizeMaxLength()\n );\n let cache = this.workerManager?.getFileResultCache(file);\n if (cache != null && !areFileRenderOptionsEqual(options, cache.options)) {\n cache = undefined;\n }\n this.renderCache ??= {\n file,\n options,\n highlighted: !massiveFile && !isFilePlainText(file),\n result: massiveFile ? undefined : cache?.result,\n // FIXME(amadeus): Add support for renderRanges\n renderRange: undefined,\n };\n if (this.workerManager?.isWorkingPool() === true) {\n if (this.renderCache.result == null && !massiveFile) {\n // We should only kick off a preload of the AST if we have a WorkerPool\n this.workerManager.highlightFileAST(this, file);\n }\n }\n // Lets attempt to get the highlighter/languages ready immediately\n else if (this.highlighter == null) {\n this.computedLang = file.lang ?? getFiletypeFromFileName(file.name);\n void this.initializeHighlighter();\n }\n }\n\n private getRenderOptions(file: FileContents): GetRenderOptionsReturn {\n const options: RenderFileOptions = (() => {\n if (this.workerManager?.isWorkingPool() === true) {\n return this.workerManager.getFileRenderOptions();\n }\n const { theme = DEFAULT_THEMES, tokenizeMaxLineLength = 1000 } =\n this.options;\n return {\n theme,\n useTokenTransformer: shouldUseTokenTransformer(this.options),\n tokenizeMaxLineLength,\n };\n })();\n const { renderCache } = this;\n if (renderCache?.result == null) {\n return { options, forceHighlight: true };\n }\n if (\n !areFilesEqual(file, renderCache.file) ||\n !areFileRenderOptionsEqual(options, renderCache.options)\n ) {\n return { options, forceHighlight: true };\n }\n return { options, forceHighlight: false };\n }\n\n public getOrCreateLineCache(file: FileContents): string[] {\n // Uncached files will get split every time, not the greatest experience\n // tbh... but something people should try to optimize away\n if (file.cacheKey == null) {\n this.lineCache = undefined;\n return linesFromFileContents(file.contents);\n }\n\n let { lineCache } = this;\n if (lineCache == null || lineCache.cacheKey !== file.cacheKey) {\n lineCache = {\n cacheKey: file.cacheKey,\n lines: linesFromFileContents(file.contents),\n };\n }\n this.lineCache = lineCache;\n return lineCache.lines;\n }\n\n // when a emitLineCountChange is called,\n // calculate the line count using the cached text document\n public getLineCount(file: FileContents): number {\n return (\n this.textDocumentCache.get(file)?.lineCount ??\n this.getOrCreateLineCache(file).length\n );\n }\n\n public updateRenderCache(\n dirtyLines: Map<number, Array<HighlightedToken>>,\n themeType: 'dark' | 'light'\n ): void {\n if (this.renderCache == null) {\n return;\n }\n const { file, result } = this.renderCache;\n if (result == null) {\n return;\n }\n // Mirror DiffHunksRenderer keeping `diff.additionLines` in sync during an\n // edit session: patch the split-line cache with the edited line text so\n // recycle() can persist the session's contents into the file. The line\n // cache includes the document's trailing empty line, so editor line\n // indexes map 1:1; lines past the cache (document grew) are handled by\n // applyDocumentChange instead.\n const lineCache =\n this.lineCache != null &&\n file.cacheKey != null &&\n this.lineCache.cacheKey === file.cacheKey\n ? this.lineCache\n : undefined;\n for (const [line, tokens] of dirtyLines) {\n if (lineCache != null && line < lineCache.lines.length) {\n const lineText = tokens.map((token) => token[2]).join('');\n lineCache.lines[line] = applyLineTextWithNewline(\n lineCache.lines[line] ?? '',\n lineText\n );\n }\n result.code[line] = {\n type: 'element',\n tagName: 'div',\n properties: {\n 'data-line': line + 1,\n 'data-line-type': 'context',\n 'data-line-index': line,\n },\n children: tokens.map(([char, fg, text]) => {\n if (char === 0 && fg === '') {\n if (text === '') {\n return {\n type: 'element',\n tagName: 'br',\n properties: {},\n children: [],\n };\n }\n return { type: 'text', value: text };\n }\n return {\n type: 'element',\n tagName: 'span',\n properties: {\n 'data-char': char,\n style: `--diffs-token-${themeType}:${fg};`,\n },\n children: [{ type: 'text', value: text }],\n };\n }),\n };\n }\n\n result.baseThemeType = themeType;\n this.renderCache.isDirty = true;\n }\n\n // normally triggered by the host when the document line count changes\n public applyDocumentChange(textDocument: DiffsTextDocument): void {\n if (this.renderCache == null) {\n return undefined;\n }\n const { file, result } = this.renderCache;\n // Without a result there is nothing to reconcile the document against, so\n // do not record it either: the document cache must never claim line\n // counts the (possibly still highlighting) result cannot back, or the\n // async highlight pass would process lines that do not exist.\n if (result == null) {\n return undefined;\n }\n if (result.code.length !== textDocument.lineCount) {\n result.code.length = Math.min(result.code.length, textDocument.lineCount);\n for (let i = result.code.length; i < textDocument.lineCount; i++) {\n // prefill lines with plain text content\n result.code.push({\n type: 'element',\n tagName: 'div',\n properties: {\n 'data-line': i + 1,\n 'data-line-type': 'context',\n 'data-line-index': i,\n },\n children: [\n {\n type: 'element',\n tagName: 'span',\n properties: {\n 'data-char': 0,\n },\n children: [\n {\n type: 'text',\n value: textDocument.getLineText(i),\n },\n ],\n },\n ],\n });\n }\n this.renderCache.isDirty = true;\n }\n // A line-count change invalidates the per-line sync updateRenderCache\n // performs, so rebuild the split-line cache from the document wholesale\n // (the file analog of DiffHunksRenderer re-splitting `additionLines`).\n if (file.cacheKey != null) {\n this.lineCache = {\n cacheKey: file.cacheKey,\n lines: linesFromFileContents(textDocument.getText()),\n };\n }\n this.textDocumentCache.set(file, textDocument);\n }\n\n public renderFile(\n file: FileContents | undefined = this.renderCache?.file,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): FileRenderResult | undefined {\n if (file == null) {\n return undefined;\n }\n let { options, forceHighlight } = this.getRenderOptions(file);\n const cache = this.getMatchingWorkerResultCache(file, options);\n if (cache != null && !this.hasHighlightedRenderCache(file, options)) {\n this.renderCache = {\n file,\n highlighted: true,\n renderRange: undefined,\n ...cache,\n };\n forceHighlight = false;\n }\n this.renderCache ??= {\n file,\n highlighted: false,\n options,\n result: undefined,\n renderRange: undefined,\n };\n const lines = this.getOrCreateLineCache(file);\n const hasContent = file.contents.length > 0;\n const forcePlainText =\n !hasContent ||\n isFilePlainText(file) ||\n isFileMassive(lines.length, this.getTokenizeMaxLength());\n const newContent = !areFilesEqual(file, this.renderCache.file);\n const newRenderRange = !areRenderRangesEqual(\n this.renderCache.renderRange,\n renderRange\n );\n if (this.workerManager?.isWorkingPool() === true) {\n // Cache invalidation based on renderRange comparison\n if (\n forcePlainText ||\n this.renderCache.result == null ||\n (!this.renderCache.highlighted && (newContent || newRenderRange))\n ) {\n this.renderCache.file = file;\n this.renderCache.options = options;\n this.renderCache.highlighted = false;\n if (\n this.renderCache.result == null ||\n newContent ||\n newRenderRange ||\n forceHighlight\n ) {\n this.renderCache.result = this.workerManager.getPlainFileAST(\n file,\n renderRange.startingLine,\n renderRange.totalLines,\n lines\n );\n }\n this.renderCache.renderRange = renderRange;\n }\n\n if (\n !forcePlainText &&\n hasContent &&\n (!this.renderCache.highlighted || forceHighlight)\n ) {\n this.workerManager.highlightFileAST(this, file);\n }\n } else {\n this.computedLang = file.lang ?? getFiletypeFromFileName(file.name);\n const hasThemes =\n this.highlighter != null && areThemesAttached(options.theme);\n const hasLangs =\n this.highlighter != null && areLanguagesAttached(this.computedLang);\n const canHighlight = !forcePlainText && hasLangs;\n\n // If we have any semblance of a highlighter with the correct theme(s)\n // attached, we can kick off some form of rendering. If we don't have\n // the correct language, then we can render plain text and after kick off\n // an async job to get the highlighted AST\n if (\n this.highlighter != null &&\n hasThemes &&\n (forceHighlight ||\n forcePlainText ||\n (!this.renderCache.highlighted && canHighlight) ||\n this.renderCache.result == null)\n ) {\n const { result, options } = this.renderFileWithHighlighter(\n file,\n this.highlighter,\n forcePlainText || !hasLangs\n );\n this.renderCache = {\n file,\n options,\n highlighted: canHighlight,\n result,\n renderRange: undefined,\n };\n }\n\n // If we get in here it means we'll have to kick off an async highlight\n // process which will involve initializing the highlighter with new themes\n // and languages\n if (!hasThemes || (!forcePlainText && !hasLangs)) {\n void this.asyncHighlight(file).then(({ result, options }) => {\n // In this case we need to force a re-render, so we can do that by\n // reaching into renderCache\n if (this.renderCache != null) {\n this.renderCache.highlighted = false;\n }\n this.onHighlightSuccess(file, result, options, !forcePlainText);\n });\n }\n }\n\n return this.renderCache.result != null\n ? this.processFileResult(\n this.renderCache.file,\n renderRange,\n this.renderCache.result\n )\n : undefined;\n }\n\n async asyncRender(\n file: FileContents,\n renderRange: RenderRange = DEFAULT_RENDER_RANGE\n ): Promise<FileRenderResult> {\n const { result } = await this.asyncHighlight(file);\n return this.processFileResult(file, renderRange, result);\n }\n\n private async asyncHighlight(file: FileContents): Promise<RenderFileResult> {\n const lines = this.getOrCreateLineCache(file);\n const forcePlainText = isFileMassive(\n lines.length,\n this.getTokenizeMaxLength()\n );\n this.computedLang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const hasThemes =\n this.highlighter != null &&\n hasResolvedThemes(getThemes(this.options.theme));\n const hasLangs =\n forcePlainText ||\n (this.highlighter != null && areLanguagesAttached(this.computedLang));\n // If we don't have the required langs or themes, then we need to\n // initialize the highlighter to load the appropriate languages and themes\n if (this.highlighter == null || !hasThemes || !hasLangs) {\n this.highlighter = await this.initializeHighlighter();\n }\n return this.renderFileWithHighlighter(\n file,\n this.highlighter,\n forcePlainText\n );\n }\n\n private renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n forcePlainText = false\n ): RenderFileResult {\n const { options } = this.getRenderOptions(file);\n const result = renderFileWithHighlighter(file, highlighter, options, {\n forcePlainText,\n });\n return { result, options };\n }\n\n private processFileResult(\n file: FileContents,\n renderRange: RenderRange,\n { code, themeStyles, baseThemeType }: ThemedFileResult\n ): FileRenderResult {\n const totalLines = this.getLineCount(file);\n const { disableFileHeader = false } = this.options;\n const contentArray: ElementContent[] = [];\n const gutter = createGutterWrapper();\n const endLine = Math.min(\n renderRange.startingLine + renderRange.totalLines,\n totalLines\n );\n let rowCount = 0;\n\n const fileLevelAnnotations = shouldRenderFileAnnotations(renderRange)\n ? getFileAnnotations(this.lineAnnotations)\n : undefined;\n if (fileLevelAnnotations != null) {\n gutter.children.push(createGutterGap('context', 'annotation', 1));\n contentArray.push(\n createAnnotationElement({\n type: 'annotation',\n hunkIndex: FILE_ANNOTATION_HUNK_INDEX,\n lineIndex: FILE_ANNOTATION_LINE_INDEX,\n annotations: fileLevelAnnotations.map((annotation) =>\n getLineAnnotationName(annotation)\n ),\n })\n );\n rowCount++;\n }\n\n for (\n let lineIndex = renderRange.startingLine;\n lineIndex < endLine;\n lineIndex++\n ) {\n const lineNumber = lineIndex + 1;\n\n // Sparse array - directly indexed by lineIndex\n const line = code[lineIndex];\n if (line == null) {\n const message = 'FileRenderer.processFileResult: Line doesnt exist';\n console.error(message, {\n name: file.name,\n lineIndex,\n lineNumber,\n });\n throw new Error(message);\n }\n\n // Add gutter line number\n gutter.children.push(\n createGutterItem('context', lineNumber, `${lineIndex}`)\n );\n contentArray.push(line);\n rowCount++;\n\n // Check annotations using ACTUAL line number from file\n const annotations = this.lineAnnotations[lineNumber];\n if (annotations != null) {\n gutter.children.push(createGutterGap('context', 'annotation', 1));\n contentArray.push(\n createAnnotationElement({\n type: 'annotation',\n hunkIndex: 0,\n lineIndex: lineNumber,\n annotations: annotations.map((annotation) =>\n getLineAnnotationName(annotation)\n ),\n })\n );\n rowCount++;\n }\n }\n\n // Finalize: wrap gutter and content\n gutter.properties.style = `grid-row: span ${rowCount}`;\n return {\n gutterAST: gutter.children ?? [],\n contentAST: contentArray,\n preAST: this.createPreElement(totalLines),\n headerAST: !disableFileHeader ? this.renderHeader(file) : undefined,\n totalLines: totalLines,\n rowCount,\n themeStyles: themeStyles,\n baseThemeType,\n bufferBefore: renderRange.bufferBefore,\n bufferAfter: renderRange.bufferAfter,\n css: '',\n };\n }\n\n private renderHeader(file: FileContents) {\n const { headerRenderMode = 'default', stickyHeader = false } = this.options;\n return createFileHeaderElement({\n fileOrDiff: file,\n mode: headerRenderMode,\n stickyHeader,\n });\n }\n\n public renderFullHTML(result: FileRenderResult): string {\n return toHtml(this.renderFullAST(result));\n }\n\n public renderFullAST(\n result: FileRenderResult,\n children: ElementContent[] = []\n ): HASTElement {\n children.push(\n createHastElement({\n tagName: 'code',\n children: this.renderCodeAST(result),\n properties: { 'data-code': '' },\n })\n );\n return { ...result.preAST, children };\n }\n\n public renderCodeAST(result: FileRenderResult): ElementContent[] {\n const gutter = createGutterWrapper();\n gutter.children = result.gutterAST;\n gutter.properties.style = `grid-row: span ${result.rowCount}`;\n const contentColumn = createContentColumn(\n result.contentAST,\n result.rowCount\n );\n return [gutter, contentColumn];\n }\n\n public renderPartialHTML(\n children: ElementContent[],\n includeCodeNode: boolean = false\n ): string {\n if (!includeCodeNode) {\n return toHtml(children);\n }\n return toHtml(\n createHastElement({\n tagName: 'code',\n children,\n properties: { 'data-code': '' },\n })\n );\n }\n\n public async initializeHighlighter(): Promise<DiffsHighlighter> {\n this.highlighter = await getSharedHighlighter(\n getHighlighterOptions(this.computedLang, this.options)\n );\n return this.highlighter;\n }\n\n public onHighlightSuccess(\n file: FileContents,\n result: ThemedFileResult,\n options: RenderFileOptions,\n highlighted = true\n ): void {\n if (this.renderCache == null) {\n return;\n }\n const triggerRenderUpdate =\n !areFilesEqual(file, this.renderCache.file) ||\n !this.renderCache.highlighted ||\n !areFileRenderOptionsEqual(options, this.renderCache.options);\n\n this.renderCache = {\n file,\n options,\n highlighted,\n result,\n renderRange: undefined,\n };\n\n if (triggerRenderUpdate) {\n this.onRenderUpdate?.();\n }\n }\n\n private getMatchingWorkerResultCache(\n file: FileContents,\n options: RenderFileOptions\n ): RenderFileResult | undefined {\n const cache = this.workerManager?.getFileResultCache(file);\n if (cache == null || !areFileRenderOptionsEqual(options, cache.options)) {\n return undefined;\n }\n return cache;\n }\n\n private hasHighlightedRenderCache(\n file: FileContents,\n options: RenderFileOptions\n ): boolean {\n const { renderCache } = this;\n return (\n renderCache?.result != null &&\n renderCache.highlighted &&\n areFilesEqual(file, renderCache.file) &&\n areFileRenderOptionsEqual(options, renderCache.options)\n );\n }\n\n public onHighlightError(error: unknown): void {\n console.error(error);\n }\n\n private getTokenizeMaxLength(): number {\n return this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH;\n }\n\n private createPreElement(totalLines: number): HASTElement {\n const { disableLineNumbers = false, overflow = 'scroll' } = this.options;\n return createPreElement({\n type: 'file',\n diffIndicators: 'none',\n disableBackground: true,\n disableLineNumbers,\n overflow,\n split: false,\n totalLines,\n });\n }\n}\n\nfunction isFileMassive(lineCount: number, tokenizeMaxLength: number): boolean {\n return lineCount > tokenizeMaxLength;\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, CodeToHastOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, CreatePatchOptionsNonabortable, CustomPreProperties, DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, ThemeRegistration, ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs } from "../types.js";
1
+ import { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, CodeToHastOptions, CodeViewCreateEditorOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, CreatePatchOptionsNonabortable, CustomPreProperties, DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffFileInput, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorHost, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffContentsLoader, FileDiffLoadedChangedFiles, FileDiffLoadedFiles, FileDiffLoadedPureRenamedFile, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MaybeDiffFileInput, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, ThemeRegistration, ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs } from "../types.js";
2
2
  import { PreloadDiffOptions, PreloadFileDiffOptions, PreloadFileDiffResult, PreloadMultiFileDiffOptions, PreloadMultiFileDiffResult, PreloadPatchDiffOptions, PreloadPatchDiffResult, PreloadUnresolvedFileOptions, PreloadUnresolvedFileResult, preloadDiffHTML, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadUnresolvedFile, preloadUnresolvedFileHTML } from "./preloadDiffs.js";
3
3
  import { PreloadFileOptions, PreloadedFileResult, preloadFile } from "./preloadFile.js";
4
4
  import { PreloadPatchFileOptions, preloadPatchFile } from "./preloadPatchFile.js";
5
5
  import { renderHTML } from "./renderHTML.js";
6
- export { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, type BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, type CodeToHastOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, type CreatePatchOptionsNonabortable, CustomPreProperties, type DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, type LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, PreloadDiffOptions, PreloadFileDiffOptions, PreloadFileDiffResult, PreloadFileOptions, PreloadMultiFileDiffOptions, PreloadMultiFileDiffResult, PreloadPatchDiffOptions, PreloadPatchDiffResult, PreloadPatchFileOptions, PreloadUnresolvedFileOptions, PreloadUnresolvedFileResult, PreloadedFileResult, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, type ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, type ThemeRegistration, type ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, type ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs, preloadDiffHTML, preloadFile, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadPatchFile, preloadUnresolvedFile, preloadUnresolvedFileHTML, renderHTML };
6
+ export { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, type BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, type CodeToHastOptions, CodeViewCreateEditorOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, type CreatePatchOptionsNonabortable, CustomPreProperties, type DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffFileInput, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorHost, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffContentsLoader, FileDiffLoadedChangedFiles, FileDiffLoadedFiles, FileDiffLoadedPureRenamedFile, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, type LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MaybeDiffFileInput, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, PreloadDiffOptions, PreloadFileDiffOptions, PreloadFileDiffResult, PreloadFileOptions, PreloadMultiFileDiffOptions, PreloadMultiFileDiffResult, PreloadPatchDiffOptions, PreloadPatchDiffResult, PreloadPatchFileOptions, PreloadUnresolvedFileOptions, PreloadUnresolvedFileResult, PreloadedFileResult, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, type ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, type ThemeRegistration, type ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, type ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs, preloadDiffHTML, preloadFile, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadPatchFile, preloadUnresolvedFile, preloadUnresolvedFileHTML, renderHTML };
@@ -1,15 +1,17 @@
1
- import { DiffLineAnnotation, FileContents, FileDiffMetadata } from "../types.js";
1
+ import { DiffFileInput, DiffLineAnnotation, FileContents, FileDiffMetadata, MaybeDiffFileInput } from "../types.js";
2
2
  import { FileDiffOptions } from "../components/FileDiff.js";
3
3
  import { UnresolvedFileOptions } from "../components/UnresolvedFile.js";
4
4
 
5
5
  //#region src/ssr/preloadDiffs.d.ts
6
- interface PreloadDiffOptions<LAnnotation> {
7
- fileDiff?: FileDiffMetadata;
8
- oldFile?: FileContents;
9
- newFile?: FileContents;
6
+ interface PreloadDiffBaseOptions<LAnnotation> {
10
7
  options?: FileDiffOptions<LAnnotation>;
11
8
  annotations?: DiffLineAnnotation<LAnnotation>[];
12
9
  }
10
+ type PreloadDiffOptions<LAnnotation> = PreloadDiffBaseOptions<LAnnotation> & (({
11
+ fileDiff: FileDiffMetadata;
12
+ } & MaybeDiffFileInput) | ({
13
+ fileDiff?: undefined;
14
+ } & DiffFileInput));
13
15
  declare function preloadDiffHTML<LAnnotation = undefined>({
14
16
  fileDiff,
15
17
  oldFile,
@@ -22,15 +24,14 @@ declare function preloadUnresolvedFileHTML<LAnnotation = undefined>({
22
24
  options,
23
25
  annotations
24
26
  }: PreloadUnresolvedFileOptions<LAnnotation>): Promise<string>;
25
- interface PreloadMultiFileDiffOptions<LAnnotation> {
26
- oldFile: FileContents;
27
- newFile: FileContents;
27
+ interface PreloadMultiFileDiffBaseOptions<LAnnotation> {
28
28
  options?: FileDiffOptions<LAnnotation>;
29
29
  annotations?: DiffLineAnnotation<LAnnotation>[];
30
30
  }
31
- interface PreloadMultiFileDiffResult<LAnnotation> extends PreloadMultiFileDiffOptions<LAnnotation> {
31
+ type PreloadMultiFileDiffOptions<LAnnotation> = PreloadMultiFileDiffBaseOptions<LAnnotation> & DiffFileInput;
32
+ type PreloadMultiFileDiffResult<LAnnotation> = PreloadMultiFileDiffOptions<LAnnotation> & {
32
33
  prerenderedHTML: string;
33
- }
34
+ };
34
35
  declare function preloadMultiFileDiff<LAnnotation = undefined>({
35
36
  oldFile,
36
37
  newFile,
@@ -1 +1 @@
1
- {"version":3,"file":"preloadDiffs.d.ts","names":[],"sources":["../../src/ssr/preloadDiffs.ts"],"mappings":";;;;;UA0BiB,kBAAA;EACf,QAAA,GAAW,gBAAA;EACX,OAAA,GAAU,YAAA;EACV,OAAA,GAAU,YAAA;EACV,OAAA,GAAU,eAAA,CAAgB,WAAA;EAC1B,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,iBAGb,eAAA;EACpB,QAAA;EACA,OAAA;EACA,OAAA;EACA,OAAA;EACA;AAAA,GACC,kBAAA,CAAmB,WAAA,IAAe,OAAA;AAAA,iBAyBf,yBAAA;EACpB,IAAA;EACA,OAAA;EACA;AAAA,GACC,4BAAA,CAA6B,WAAA,IAAe,OAAA;AAAA,UAsB9B,2BAAA;EACf,OAAA,EAAS,YAAA;EACT,OAAA,EAAS,YAAA;EACT,OAAA,GAAU,eAAA,CAAgB,WAAA;EAC1B,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,UAGlB,0BAAA,sBAEP,2BAA2B,CAAC,WAAA;EACpC,eAAA;AAAA;AAAA,iBAGoB,oBAAA;EACpB,OAAA;EACA,OAAA;EACA,OAAA;EACA;AAAA,GACC,2BAAA,CAA4B,WAAA,IAAe,OAAA,CAC5C,0BAAA,CAA2B,WAAA;AAAA,UAgBZ,sBAAA;EACf,QAAA,EAAU,gBAAA;EACV,OAAA,GAAU,eAAA,CAAgB,WAAA;EAC1B,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,UAGlB,qBAAA,sBAEP,sBAAsB,CAAC,WAAA;EAC/B,eAAA;AAAA;AAAA,iBAGoB,eAAA;EACpB,QAAA;EACA,OAAA;EACA;AAAA,GACC,sBAAA,CAAuB,WAAA,IAAe,OAAA,CACvC,qBAAA,CAAsB,WAAA;AAAA,UAcP,4BAAA;EACf,IAAA,EAAM,YAAA;EACN,OAAA,GAAU,IAAA,CACR,qBAAA,CAAsB,WAAA;EAGxB,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,UAGlB,2BAAA,sBAEP,4BAA4B,CAAC,WAAA;EACrC,eAAA;AAAA;AAAA,iBAGoB,qBAAA;EACpB,IAAA;EACA,OAAA;EACA;AAAA,GACC,4BAAA,CAA6B,WAAA,IAAe,OAAA,CAC7C,2BAAA,CAA4B,WAAA;AAAA,UAcb,uBAAA;EACf,KAAA;EACA,OAAA,GAAU,eAAA,CAAgB,WAAA;EAC1B,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,UAGlB,sBAAA,sBAEP,uBAAuB,CAAC,WAAA;EAChC,eAAA;AAAA;AAAA,iBAGoB,gBAAA;EACpB,KAAA;EACA,OAAA;EACA;AAAA,GACC,uBAAA,CAAwB,WAAA,IAAe,OAAA,CACxC,sBAAA,CAAuB,WAAA"}
1
+ {"version":3,"file":"preloadDiffs.d.ts","names":[],"sources":["../../src/ssr/preloadDiffs.ts"],"mappings":";;;;;UA6BU,sBAAA;EACR,OAAA,GAAU,eAAA,CAAgB,WAAA;EAC1B,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,KAGvB,kBAAA,gBACV,sBAAA,CAAuB,WAAA;EAEd,QAAA,EAAU,gBAAA;AAAA,IAAqB,kBAAA;EAC/B,QAAA;AAAA,IAAyB,aAAA;AAAA,iBAGd,eAAA;EACpB,QAAA;EACA,OAAA;EACA,OAAA;EACA,OAAA;EACA;AAAA,GACC,kBAAA,CAAmB,WAAA,IAAe,OAAA;AAAA,iBA8Bf,yBAAA;EACpB,IAAA;EACA,OAAA;EACA;AAAA,GACC,4BAAA,CAA6B,WAAA,IAAe,OAAA;AAAA,UAsBrC,+BAAA;EACR,OAAA,GAAU,eAAA,CAAgB,WAAA;EAC1B,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,KAGvB,2BAAA,gBACV,+BAAA,CAAgC,WAAA,IAAe,aAAA;AAAA,KAErC,0BAAA,gBACV,2BAA2B,CAAC,WAAA;EAC1B,eAAA;AAAA;AAAA,iBAGkB,oBAAA;EACpB,OAAA;EACA,OAAA;EACA,OAAA;EACA;AAAA,GACC,2BAAA,CAA4B,WAAA,IAAe,OAAA,CAC5C,0BAAA,CAA2B,WAAA;AAAA,UAuBZ,sBAAA;EACf,QAAA,EAAU,gBAAA;EACV,OAAA,GAAU,eAAA,CAAgB,WAAA;EAC1B,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,UAGlB,qBAAA,sBAEP,sBAAsB,CAAC,WAAA;EAC/B,eAAA;AAAA;AAAA,iBAGoB,eAAA;EACpB,QAAA;EACA,OAAA;EACA;AAAA,GACC,sBAAA,CAAuB,WAAA,IAAe,OAAA,CACvC,qBAAA,CAAsB,WAAA;AAAA,UAcP,4BAAA;EACf,IAAA,EAAM,YAAA;EACN,OAAA,GAAU,IAAA,CACR,qBAAA,CAAsB,WAAA;EAGxB,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,UAGlB,2BAAA,sBAEP,4BAA4B,CAAC,WAAA;EACrC,eAAA;AAAA;AAAA,iBAGoB,qBAAA;EACpB,IAAA;EACA,OAAA;EACA;AAAA,GACC,4BAAA,CAA6B,WAAA,IAAe,OAAA,CAC7C,2BAAA,CAA4B,WAAA;AAAA,UAcb,uBAAA;EACf,KAAA;EACA,OAAA,GAAU,eAAA,CAAgB,WAAA;EAC1B,WAAA,GAAc,kBAAA,CAAmB,WAAA;AAAA;AAAA,UAGlB,sBAAA,sBAEP,uBAAuB,CAAC,WAAA;EAChC,eAAA;AAAA;AAAA,iBAGoB,gBAAA;EACpB,KAAA;EACA,OAAA;EACA;AAAA,GACC,uBAAA,CAAwB,WAAA,IAAe,OAAA,CACxC,sBAAA,CAAuB,WAAA"}
@@ -1,4 +1,5 @@
1
1
  import { wrapThemeCSS } from "../utils/cssWrappers.js";
2
+ import { getDiffFileInput } from "../utils/getDiffFileInput.js";
2
3
  import { parseDiffFromFile } from "../utils/parseDiffFromFile.js";
3
4
  import { DiffHunksRenderer } from "../renderers/DiffHunksRenderer.js";
4
5
  import { parseMergeConflictDiffFromFile } from "../utils/parseMergeConflictDiffFromFile.js";
@@ -9,8 +10,12 @@ import { getSingularPatch } from "../utils/getSingularPatch.js";
9
10
  import { renderHTML } from "./renderHTML.js";
10
11
  //#region src/ssr/preloadDiffs.ts
11
12
  async function preloadDiffHTML({ fileDiff, oldFile, newFile, options, annotations }) {
12
- if (fileDiff == null && oldFile != null && newFile != null) fileDiff = parseDiffFromFile(oldFile, newFile, options?.parseDiffOptions);
13
- if (fileDiff == null) throw new Error("preloadFileDiff: You must pass at least a fileDiff prop or oldFile/newFile props");
13
+ const fileInput = getDiffFileInput({
14
+ oldFile,
15
+ newFile
16
+ }, "preloadDiffHTML");
17
+ if (fileDiff == null && fileInput != null) fileDiff = parseDiffFromFile(fileInput.oldFile, fileInput.newFile, options?.parseDiffOptions);
18
+ if (fileDiff == null) throw new Error("preloadFileDiff: You must pass at least a fileDiff, oldFile, or newFile prop");
14
19
  const renderer = new DiffHunksRenderer(getHunksRendererOptions(options));
15
20
  if (annotations != null && annotations.length > 0) renderer.setLineAnnotations(annotations);
16
21
  return renderHTML(processHunkResult(await renderer.asyncRender(fileDiff), renderer, options?.unsafeCSS, options?.themeType ?? "system"));
@@ -23,14 +28,17 @@ async function preloadUnresolvedFileHTML({ file, options, annotations }) {
23
28
  return renderHTML(processHunkResult(await renderer.asyncRender(fileDiff), renderer, options?.unsafeCSS, options?.themeType ?? "system"));
24
29
  }
25
30
  async function preloadMultiFileDiff({ oldFile, newFile, options, annotations }) {
26
- return {
27
- newFile,
31
+ const fileInput = getDiffFileInput({
28
32
  oldFile,
33
+ newFile
34
+ }, "preloadMultiFileDiff");
35
+ if (fileInput == null) throw new Error("preloadMultiFileDiff: You must pass oldFile, newFile, or both");
36
+ return {
37
+ ...fileInput,
29
38
  options,
30
39
  annotations,
31
40
  prerenderedHTML: await preloadDiffHTML({
32
- oldFile,
33
- newFile,
41
+ ...fileInput,
34
42
  options,
35
43
  annotations
36
44
  })
@@ -1 +1 @@
1
- {"version":3,"file":"preloadDiffs.js","names":[],"sources":["../../src/ssr/preloadDiffs.ts"],"sourcesContent":["import type { FileDiffOptions } from '../components/FileDiff';\nimport {\n getUnresolvedDiffHunksRendererOptions,\n type UnresolvedFileOptions,\n} from '../components/UnresolvedFile';\nimport {\n DiffHunksRenderer,\n type DiffHunksRendererOptions,\n type HunksRenderResult,\n} from '../renderers/DiffHunksRenderer';\nimport { UnresolvedFileHunksRenderer } from '../renderers/UnresolvedFileHunksRenderer';\nimport type {\n DiffLineAnnotation,\n FileContents,\n FileDiffMetadata,\n} from '../types';\nimport {\n createStyleElement,\n createThemeStyleElement,\n} from '../utils/createStyleElement';\nimport { wrapThemeCSS } from '../utils/cssWrappers';\nimport { getSingularPatch } from '../utils/getSingularPatch';\nimport { parseDiffFromFile } from '../utils/parseDiffFromFile';\nimport { parseMergeConflictDiffFromFile } from '../utils/parseMergeConflictDiffFromFile';\nimport { renderHTML } from './renderHTML';\n\nexport interface PreloadDiffOptions<LAnnotation> {\n fileDiff?: FileDiffMetadata;\n oldFile?: FileContents;\n newFile?: FileContents;\n options?: FileDiffOptions<LAnnotation>;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport async function preloadDiffHTML<LAnnotation = undefined>({\n fileDiff,\n oldFile,\n newFile,\n options,\n annotations,\n}: PreloadDiffOptions<LAnnotation>): Promise<string> {\n if (fileDiff == null && oldFile != null && newFile != null) {\n fileDiff = parseDiffFromFile(oldFile, newFile, options?.parseDiffOptions);\n }\n if (fileDiff == null) {\n throw new Error(\n 'preloadFileDiff: You must pass at least a fileDiff prop or oldFile/newFile props'\n );\n }\n const renderer = new DiffHunksRenderer<LAnnotation>(\n getHunksRendererOptions(options)\n );\n if (annotations != null && annotations.length > 0) {\n renderer.setLineAnnotations(annotations);\n }\n return renderHTML(\n processHunkResult(\n await renderer.asyncRender(fileDiff),\n renderer,\n options?.unsafeCSS,\n options?.themeType ?? 'system'\n )\n );\n}\n\nexport async function preloadUnresolvedFileHTML<LAnnotation = undefined>({\n file,\n options,\n annotations,\n}: PreloadUnresolvedFileOptions<LAnnotation>): Promise<string> {\n const { fileDiff, actions, markerRows } = parseMergeConflictDiffFromFile(\n file,\n options?.maxContextLines\n );\n const renderer = new UnresolvedFileHunksRenderer<LAnnotation>(\n getUnresolvedDiffHunksRendererOptions(options)\n );\n if (annotations != null && annotations.length > 0) {\n renderer.setLineAnnotations(annotations);\n }\n renderer.setConflictState(actions, markerRows, fileDiff);\n return renderHTML(\n processHunkResult(\n await renderer.asyncRender(fileDiff),\n renderer,\n options?.unsafeCSS,\n options?.themeType ?? 'system'\n )\n );\n}\n\nexport interface PreloadMultiFileDiffOptions<LAnnotation> {\n oldFile: FileContents;\n newFile: FileContents;\n options?: FileDiffOptions<LAnnotation>;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport interface PreloadMultiFileDiffResult<\n LAnnotation,\n> extends PreloadMultiFileDiffOptions<LAnnotation> {\n prerenderedHTML: string;\n}\n\nexport async function preloadMultiFileDiff<LAnnotation = undefined>({\n oldFile,\n newFile,\n options,\n annotations,\n}: PreloadMultiFileDiffOptions<LAnnotation>): Promise<\n PreloadMultiFileDiffResult<LAnnotation>\n> {\n return {\n newFile,\n oldFile,\n options,\n annotations,\n prerenderedHTML: await preloadDiffHTML({\n oldFile,\n newFile,\n options,\n annotations,\n }),\n };\n}\n\nexport interface PreloadFileDiffOptions<LAnnotation> {\n fileDiff: FileDiffMetadata;\n options?: FileDiffOptions<LAnnotation>;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport interface PreloadFileDiffResult<\n LAnnotation,\n> extends PreloadFileDiffOptions<LAnnotation> {\n prerenderedHTML: string;\n}\n\nexport async function preloadFileDiff<LAnnotation = undefined>({\n fileDiff,\n options,\n annotations,\n}: PreloadFileDiffOptions<LAnnotation>): Promise<\n PreloadFileDiffResult<LAnnotation>\n> {\n return {\n fileDiff,\n options,\n annotations,\n prerenderedHTML: await preloadDiffHTML({\n fileDiff,\n options,\n annotations,\n }),\n };\n}\n\nexport interface PreloadUnresolvedFileOptions<LAnnotation> {\n file: FileContents;\n options?: Omit<\n UnresolvedFileOptions<LAnnotation>,\n 'onMergeConflictAction' | 'onMergeConflictResolve' | 'onPostRender'\n >;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport interface PreloadUnresolvedFileResult<\n LAnnotation,\n> extends PreloadUnresolvedFileOptions<LAnnotation> {\n prerenderedHTML: string;\n}\n\nexport async function preloadUnresolvedFile<LAnnotation = undefined>({\n file,\n options,\n annotations,\n}: PreloadUnresolvedFileOptions<LAnnotation>): Promise<\n PreloadUnresolvedFileResult<LAnnotation>\n> {\n return {\n file,\n options,\n annotations,\n prerenderedHTML: await preloadUnresolvedFileHTML({\n file,\n options,\n annotations,\n }),\n };\n}\n\nexport interface PreloadPatchDiffOptions<LAnnotation> {\n patch: string;\n options?: FileDiffOptions<LAnnotation>;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport interface PreloadPatchDiffResult<\n LAnnotation,\n> extends PreloadPatchDiffOptions<LAnnotation> {\n prerenderedHTML: string;\n}\n\nexport async function preloadPatchDiff<LAnnotation = undefined>({\n patch,\n options,\n annotations,\n}: PreloadPatchDiffOptions<LAnnotation>): Promise<\n PreloadPatchDiffResult<LAnnotation>\n> {\n const fileDiff = getSingularPatch(patch);\n return {\n patch,\n options,\n annotations,\n prerenderedHTML: await preloadDiffHTML({\n fileDiff,\n options,\n annotations,\n }),\n };\n}\n\nfunction processHunkResult<LAnnotation>(\n hunkResult: HunksRenderResult,\n renderer:\n | DiffHunksRenderer<LAnnotation>\n | UnresolvedFileHunksRenderer<LAnnotation>,\n unsafeCSS: string | undefined,\n themeType: 'system' | 'light' | 'dark'\n) {\n const children = [createStyleElement(hunkResult.css, true)];\n children.push(\n createThemeStyleElement(\n wrapThemeCSS(\n hunkResult.themeStyles,\n hunkResult.baseThemeType ?? themeType\n )\n )\n );\n if (unsafeCSS != null) {\n children.push(createStyleElement(unsafeCSS));\n }\n if (hunkResult.headerElement != null) {\n children.push(hunkResult.headerElement);\n }\n const code = renderer.renderFullAST(hunkResult);\n code.properties['data-dehydrated'] = '';\n children.push(code);\n return children;\n}\n\nfunction getHunksRendererOptions<LAnnotation>(\n options: FileDiffOptions<LAnnotation> | undefined\n): DiffHunksRendererOptions {\n return {\n ...options,\n headerRenderMode:\n options?.renderCustomHeader != null ? 'custom' : 'default',\n hunkSeparators:\n typeof options?.hunkSeparators === 'function'\n ? 'custom'\n : options?.hunkSeparators,\n };\n}\n"],"mappings":";;;;;;;;;;AAkCA,eAAsB,gBAAyC,EAC7D,UACA,SACA,SACA,SACA,eACmD;CACnD,IAAI,YAAY,QAAQ,WAAW,QAAQ,WAAW,MACpD,WAAW,kBAAkB,SAAS,SAAS,SAAS,gBAAgB;CAE1E,IAAI,YAAY,MACd,MAAM,IAAI,MACR,kFACF;CAEF,MAAM,WAAW,IAAI,kBACnB,wBAAwB,OAAO,CACjC;CACA,IAAI,eAAe,QAAQ,YAAY,SAAS,GAC9C,SAAS,mBAAmB,WAAW;CAEzC,OAAO,WACL,kBACE,MAAM,SAAS,YAAY,QAAQ,GACnC,UACA,SAAS,WACT,SAAS,aAAa,QACxB,CACF;AACF;AAEA,eAAsB,0BAAmD,EACvE,MACA,SACA,eAC6D;CAC7D,MAAM,EAAE,UAAU,SAAS,eAAe,+BACxC,MACA,SAAS,eACX;CACA,MAAM,WAAW,IAAI,4BACnB,sCAAsC,OAAO,CAC/C;CACA,IAAI,eAAe,QAAQ,YAAY,SAAS,GAC9C,SAAS,mBAAmB,WAAW;CAEzC,SAAS,iBAAiB,SAAS,YAAY,QAAQ;CACvD,OAAO,WACL,kBACE,MAAM,SAAS,YAAY,QAAQ,GACnC,UACA,SAAS,WACT,SAAS,aAAa,QACxB,CACF;AACF;AAeA,eAAsB,qBAA8C,EAClE,SACA,SACA,SACA,eAGA;CACA,OAAO;EACL;EACA;EACA;EACA;EACA,iBAAiB,MAAM,gBAAgB;GACrC;GACA;GACA;GACA;EACF,CAAC;CACH;AACF;AAcA,eAAsB,gBAAyC,EAC7D,UACA,SACA,eAGA;CACA,OAAO;EACL;EACA;EACA;EACA,iBAAiB,MAAM,gBAAgB;GACrC;GACA;GACA;EACF,CAAC;CACH;AACF;AAiBA,eAAsB,sBAA+C,EACnE,MACA,SACA,eAGA;CACA,OAAO;EACL;EACA;EACA;EACA,iBAAiB,MAAM,0BAA0B;GAC/C;GACA;GACA;EACF,CAAC;CACH;AACF;AAcA,eAAsB,iBAA0C,EAC9D,OACA,SACA,eAGA;CAEA,OAAO;EACL;EACA;EACA;EACA,iBAAiB,MAAM,gBAAgB;GACrC,UANa,iBAAiB,KAMvB;GACP;GACA;EACF,CAAC;CACH;AACF;AAEA,SAAS,kBACP,YACA,UAGA,WACA,WACA;CACA,MAAM,WAAW,CAAC,mBAAmB,WAAW,KAAK,IAAI,CAAC;CAC1D,SAAS,KACP,wBACE,aACE,WAAW,aACX,WAAW,iBAAiB,SAC9B,CACF,CACF;CACA,IAAI,aAAa,MACf,SAAS,KAAK,mBAAmB,SAAS,CAAC;CAE7C,IAAI,WAAW,iBAAiB,MAC9B,SAAS,KAAK,WAAW,aAAa;CAExC,MAAM,OAAO,SAAS,cAAc,UAAU;CAC9C,KAAK,WAAW,qBAAqB;CACrC,SAAS,KAAK,IAAI;CAClB,OAAO;AACT;AAEA,SAAS,wBACP,SAC0B;CAC1B,OAAO;EACL,GAAG;EACH,kBACE,SAAS,sBAAsB,OAAO,WAAW;EACnD,gBACE,OAAO,SAAS,mBAAmB,aAC/B,WACA,SAAS;CACjB;AACF"}
1
+ {"version":3,"file":"preloadDiffs.js","names":[],"sources":["../../src/ssr/preloadDiffs.ts"],"sourcesContent":["import type { FileDiffOptions } from '../components/FileDiff';\nimport {\n getUnresolvedDiffHunksRendererOptions,\n type UnresolvedFileOptions,\n} from '../components/UnresolvedFile';\nimport {\n DiffHunksRenderer,\n type DiffHunksRendererOptions,\n type HunksRenderResult,\n} from '../renderers/DiffHunksRenderer';\nimport { UnresolvedFileHunksRenderer } from '../renderers/UnresolvedFileHunksRenderer';\nimport type {\n DiffFileInput,\n DiffLineAnnotation,\n FileContents,\n FileDiffMetadata,\n MaybeDiffFileInput,\n} from '../types';\nimport {\n createStyleElement,\n createThemeStyleElement,\n} from '../utils/createStyleElement';\nimport { wrapThemeCSS } from '../utils/cssWrappers';\nimport { getDiffFileInput } from '../utils/getDiffFileInput';\nimport { getSingularPatch } from '../utils/getSingularPatch';\nimport { parseDiffFromFile } from '../utils/parseDiffFromFile';\nimport { parseMergeConflictDiffFromFile } from '../utils/parseMergeConflictDiffFromFile';\nimport { renderHTML } from './renderHTML';\n\ninterface PreloadDiffBaseOptions<LAnnotation> {\n options?: FileDiffOptions<LAnnotation>;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport type PreloadDiffOptions<LAnnotation> =\n PreloadDiffBaseOptions<LAnnotation> &\n (\n | ({ fileDiff: FileDiffMetadata } & MaybeDiffFileInput)\n | ({ fileDiff?: undefined } & DiffFileInput)\n );\n\nexport async function preloadDiffHTML<LAnnotation = undefined>({\n fileDiff,\n oldFile,\n newFile,\n options,\n annotations,\n}: PreloadDiffOptions<LAnnotation>): Promise<string> {\n const fileInput = getDiffFileInput({ oldFile, newFile }, 'preloadDiffHTML');\n if (fileDiff == null && fileInput != null) {\n fileDiff = parseDiffFromFile(\n fileInput.oldFile,\n fileInput.newFile,\n options?.parseDiffOptions\n );\n }\n if (fileDiff == null) {\n throw new Error(\n 'preloadFileDiff: You must pass at least a fileDiff, oldFile, or newFile prop'\n );\n }\n const renderer = new DiffHunksRenderer<LAnnotation>(\n getHunksRendererOptions(options)\n );\n if (annotations != null && annotations.length > 0) {\n renderer.setLineAnnotations(annotations);\n }\n return renderHTML(\n processHunkResult(\n await renderer.asyncRender(fileDiff),\n renderer,\n options?.unsafeCSS,\n options?.themeType ?? 'system'\n )\n );\n}\n\nexport async function preloadUnresolvedFileHTML<LAnnotation = undefined>({\n file,\n options,\n annotations,\n}: PreloadUnresolvedFileOptions<LAnnotation>): Promise<string> {\n const { fileDiff, actions, markerRows } = parseMergeConflictDiffFromFile(\n file,\n options?.maxContextLines\n );\n const renderer = new UnresolvedFileHunksRenderer<LAnnotation>(\n getUnresolvedDiffHunksRendererOptions(options)\n );\n if (annotations != null && annotations.length > 0) {\n renderer.setLineAnnotations(annotations);\n }\n renderer.setConflictState(actions, markerRows, fileDiff);\n return renderHTML(\n processHunkResult(\n await renderer.asyncRender(fileDiff),\n renderer,\n options?.unsafeCSS,\n options?.themeType ?? 'system'\n )\n );\n}\n\ninterface PreloadMultiFileDiffBaseOptions<LAnnotation> {\n options?: FileDiffOptions<LAnnotation>;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport type PreloadMultiFileDiffOptions<LAnnotation> =\n PreloadMultiFileDiffBaseOptions<LAnnotation> & DiffFileInput;\n\nexport type PreloadMultiFileDiffResult<LAnnotation> =\n PreloadMultiFileDiffOptions<LAnnotation> & {\n prerenderedHTML: string;\n };\n\nexport async function preloadMultiFileDiff<LAnnotation = undefined>({\n oldFile,\n newFile,\n options,\n annotations,\n}: PreloadMultiFileDiffOptions<LAnnotation>): Promise<\n PreloadMultiFileDiffResult<LAnnotation>\n> {\n const fileInput = getDiffFileInput(\n { oldFile, newFile },\n 'preloadMultiFileDiff'\n );\n if (fileInput == null) {\n throw new Error(\n 'preloadMultiFileDiff: You must pass oldFile, newFile, or both'\n );\n }\n return {\n ...fileInput,\n options,\n annotations,\n prerenderedHTML: await preloadDiffHTML({\n ...fileInput,\n options,\n annotations,\n }),\n };\n}\n\nexport interface PreloadFileDiffOptions<LAnnotation> {\n fileDiff: FileDiffMetadata;\n options?: FileDiffOptions<LAnnotation>;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport interface PreloadFileDiffResult<\n LAnnotation,\n> extends PreloadFileDiffOptions<LAnnotation> {\n prerenderedHTML: string;\n}\n\nexport async function preloadFileDiff<LAnnotation = undefined>({\n fileDiff,\n options,\n annotations,\n}: PreloadFileDiffOptions<LAnnotation>): Promise<\n PreloadFileDiffResult<LAnnotation>\n> {\n return {\n fileDiff,\n options,\n annotations,\n prerenderedHTML: await preloadDiffHTML({\n fileDiff,\n options,\n annotations,\n }),\n };\n}\n\nexport interface PreloadUnresolvedFileOptions<LAnnotation> {\n file: FileContents;\n options?: Omit<\n UnresolvedFileOptions<LAnnotation>,\n 'onMergeConflictAction' | 'onMergeConflictResolve' | 'onPostRender'\n >;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport interface PreloadUnresolvedFileResult<\n LAnnotation,\n> extends PreloadUnresolvedFileOptions<LAnnotation> {\n prerenderedHTML: string;\n}\n\nexport async function preloadUnresolvedFile<LAnnotation = undefined>({\n file,\n options,\n annotations,\n}: PreloadUnresolvedFileOptions<LAnnotation>): Promise<\n PreloadUnresolvedFileResult<LAnnotation>\n> {\n return {\n file,\n options,\n annotations,\n prerenderedHTML: await preloadUnresolvedFileHTML({\n file,\n options,\n annotations,\n }),\n };\n}\n\nexport interface PreloadPatchDiffOptions<LAnnotation> {\n patch: string;\n options?: FileDiffOptions<LAnnotation>;\n annotations?: DiffLineAnnotation<LAnnotation>[];\n}\n\nexport interface PreloadPatchDiffResult<\n LAnnotation,\n> extends PreloadPatchDiffOptions<LAnnotation> {\n prerenderedHTML: string;\n}\n\nexport async function preloadPatchDiff<LAnnotation = undefined>({\n patch,\n options,\n annotations,\n}: PreloadPatchDiffOptions<LAnnotation>): Promise<\n PreloadPatchDiffResult<LAnnotation>\n> {\n const fileDiff = getSingularPatch(patch);\n return {\n patch,\n options,\n annotations,\n prerenderedHTML: await preloadDiffHTML({\n fileDiff,\n options,\n annotations,\n }),\n };\n}\n\nfunction processHunkResult<LAnnotation>(\n hunkResult: HunksRenderResult,\n renderer:\n | DiffHunksRenderer<LAnnotation>\n | UnresolvedFileHunksRenderer<LAnnotation>,\n unsafeCSS: string | undefined,\n themeType: 'system' | 'light' | 'dark'\n) {\n const children = [createStyleElement(hunkResult.css, true)];\n children.push(\n createThemeStyleElement(\n wrapThemeCSS(\n hunkResult.themeStyles,\n hunkResult.baseThemeType ?? themeType\n )\n )\n );\n if (unsafeCSS != null) {\n children.push(createStyleElement(unsafeCSS));\n }\n if (hunkResult.headerElement != null) {\n children.push(hunkResult.headerElement);\n }\n const code = renderer.renderFullAST(hunkResult);\n code.properties['data-dehydrated'] = '';\n children.push(code);\n return children;\n}\n\nfunction getHunksRendererOptions<LAnnotation>(\n options: FileDiffOptions<LAnnotation> | undefined\n): DiffHunksRendererOptions {\n return {\n ...options,\n headerRenderMode:\n options?.renderCustomHeader != null ? 'custom' : 'default',\n hunkSeparators:\n typeof options?.hunkSeparators === 'function'\n ? 'custom'\n : options?.hunkSeparators,\n };\n}\n"],"mappings":";;;;;;;;;;;AAyCA,eAAsB,gBAAyC,EAC7D,UACA,SACA,SACA,SACA,eACmD;CACnD,MAAM,YAAY,iBAAiB;EAAE;EAAS;CAAQ,GAAG,iBAAiB;CAC1E,IAAI,YAAY,QAAQ,aAAa,MACnC,WAAW,kBACT,UAAU,SACV,UAAU,SACV,SAAS,gBACX;CAEF,IAAI,YAAY,MACd,MAAM,IAAI,MACR,8EACF;CAEF,MAAM,WAAW,IAAI,kBACnB,wBAAwB,OAAO,CACjC;CACA,IAAI,eAAe,QAAQ,YAAY,SAAS,GAC9C,SAAS,mBAAmB,WAAW;CAEzC,OAAO,WACL,kBACE,MAAM,SAAS,YAAY,QAAQ,GACnC,UACA,SAAS,WACT,SAAS,aAAa,QACxB,CACF;AACF;AAEA,eAAsB,0BAAmD,EACvE,MACA,SACA,eAC6D;CAC7D,MAAM,EAAE,UAAU,SAAS,eAAe,+BACxC,MACA,SAAS,eACX;CACA,MAAM,WAAW,IAAI,4BACnB,sCAAsC,OAAO,CAC/C;CACA,IAAI,eAAe,QAAQ,YAAY,SAAS,GAC9C,SAAS,mBAAmB,WAAW;CAEzC,SAAS,iBAAiB,SAAS,YAAY,QAAQ;CACvD,OAAO,WACL,kBACE,MAAM,SAAS,YAAY,QAAQ,GACnC,UACA,SAAS,WACT,SAAS,aAAa,QACxB,CACF;AACF;AAeA,eAAsB,qBAA8C,EAClE,SACA,SACA,SACA,eAGA;CACA,MAAM,YAAY,iBAChB;EAAE;EAAS;CAAQ,GACnB,sBACF;CACA,IAAI,aAAa,MACf,MAAM,IAAI,MACR,+DACF;CAEF,OAAO;EACL,GAAG;EACH;EACA;EACA,iBAAiB,MAAM,gBAAgB;GACrC,GAAG;GACH;GACA;EACF,CAAC;CACH;AACF;AAcA,eAAsB,gBAAyC,EAC7D,UACA,SACA,eAGA;CACA,OAAO;EACL;EACA;EACA;EACA,iBAAiB,MAAM,gBAAgB;GACrC;GACA;GACA;EACF,CAAC;CACH;AACF;AAiBA,eAAsB,sBAA+C,EACnE,MACA,SACA,eAGA;CACA,OAAO;EACL;EACA;EACA;EACA,iBAAiB,MAAM,0BAA0B;GAC/C;GACA;GACA;EACF,CAAC;CACH;AACF;AAcA,eAAsB,iBAA0C,EAC9D,OACA,SACA,eAGA;CAEA,OAAO;EACL;EACA;EACA;EACA,iBAAiB,MAAM,gBAAgB;GACrC,UANa,iBAAiB,KAMvB;GACP;GACA;EACF,CAAC;CACH;AACF;AAEA,SAAS,kBACP,YACA,UAGA,WACA,WACA;CACA,MAAM,WAAW,CAAC,mBAAmB,WAAW,KAAK,IAAI,CAAC;CAC1D,SAAS,KACP,wBACE,aACE,WAAW,aACX,WAAW,iBAAiB,SAC9B,CACF,CACF;CACA,IAAI,aAAa,MACf,SAAS,KAAK,mBAAmB,SAAS,CAAC;CAE7C,IAAI,WAAW,iBAAiB,MAC9B,SAAS,KAAK,WAAW,aAAa;CAExC,MAAM,OAAO,SAAS,cAAc,UAAU;CAC9C,KAAK,WAAW,qBAAqB;CACrC,SAAS,KAAK,IAAI;CAClB,OAAO;AACT;AAEA,SAAS,wBACP,SAC0B;CAC1B,OAAO;EACL,GAAG;EACH,kBACE,SAAS,sBAAsB,OAAO,WAAW;EACnD,gBACE,OAAO,SAAS,mBAAmB,aAC/B,WACA,SAAS;CACjB;AACF"}
package/dist/types.d.ts CHANGED
@@ -24,6 +24,30 @@ interface FileContents {
24
24
  * `contents` or `name`, you must update the `cacheKey`. */
25
25
  cacheKey?: string;
26
26
  }
27
+ interface FileDiffLoadedChangedFiles {
28
+ oldFile: FileContents;
29
+ newFile: FileContents;
30
+ }
31
+ interface FileDiffLoadedPureRenamedFile {
32
+ oldFile: null;
33
+ newFile: FileContents;
34
+ }
35
+ type FileDiffLoadedFiles = FileDiffLoadedChangedFiles | FileDiffLoadedPureRenamedFile;
36
+ type DiffFileInput = {
37
+ oldFile: FileContents;
38
+ newFile: FileContents;
39
+ } | {
40
+ oldFile: null;
41
+ newFile: FileContents;
42
+ } | {
43
+ oldFile: FileContents;
44
+ newFile: null;
45
+ };
46
+ type MaybeDiffFileInput = DiffFileInput | {
47
+ oldFile?: undefined;
48
+ newFile?: undefined;
49
+ };
50
+ type FileDiffContentsLoader = (fileDiff: FileDiffMetadata) => Promise<FileDiffLoadedFiles>;
27
51
  type HighlighterTypes = 'shiki-js' | 'shiki-wasm';
28
52
  type HighlightedToken = [char: number, fg: string, text: string];
29
53
  type DiffsThemeNames = BundledTheme | (string & {});
@@ -191,6 +215,10 @@ interface Hunk {
191
215
  /**
192
216
  * Metadata and content for a single file's diff. Think of this as a JSON
193
217
  * compatible representation of a diff for a single file.
218
+ *
219
+ * When a renderer uses `loadDiffFiles` to hydrate a partial diff, it upgrades
220
+ * this metadata object in place. Keep the same object identity stable when
221
+ * callers want that hydrated state to persist across later renders.
194
222
  */
195
223
  interface FileDiffMetadata {
196
224
  /** The file's name and path. */
@@ -238,6 +266,10 @@ interface FileDiffMetadata {
238
266
  * in the patch and hunk expansion is unavailable.
239
267
  *
240
268
  * When false, they contain the complete file contents.
269
+ *
270
+ * A hydrating renderer mutates a partial metadata object to flip this to
271
+ * false after `loadDiffFiles` resolves. Passing a freshly parsed partial
272
+ * object later is treated as a new partial render model.
241
273
  */
242
274
  isPartial: boolean;
243
275
  /**
@@ -261,6 +293,11 @@ interface FileDiffMetadata {
261
293
  * to highlight if we've already highlighted the diff. Please note that if
262
294
  * you modify the contents of the diff in any way, you will need to update
263
295
  * the `cacheKey`.
296
+ *
297
+ * When `loadDiffFiles` hydrates a partial diff, Diffs uses loaded file cache
298
+ * keys when they are available so full-file highlights can be reused. If the
299
+ * loaded files are unkeyed and this partial key exists, Diffs appends a
300
+ * hydration segment as a fallback.
264
301
  */
265
302
  cacheKey?: string;
266
303
  }
@@ -307,6 +344,13 @@ interface BaseDiffOptions extends BaseCodeOptions {
307
344
  disableBackground?: boolean;
308
345
  hunkSeparators?: HunkSeparators;
309
346
  expandUnchanged?: boolean;
347
+ /**
348
+ * Fetches full file contents for partial changed/renamed diffs parsed from
349
+ * patches. Return both sides for changed diffs and `oldFile: null` for pure
350
+ * renames. Added/deleted diffs already include their available side and thus
351
+ * this function serves no purpose in those contexts
352
+ */
353
+ loadDiffFiles?: FileDiffContentsLoader;
310
354
  collapsedContextThreshold?: number;
311
355
  lineDiffType?: LineDiffTypes;
312
356
  maxLineDiffLength?: number;
@@ -317,7 +361,7 @@ interface BaseDiffOptions extends BaseCodeOptions {
317
361
  */
318
362
  parseDiffOptions?: CreatePatchOptionsNonabortable;
319
363
  }
320
- type BaseDiffOptionsWithDefaults = Required<Omit<BaseDiffOptions, 'unsafeCSS' | 'preferredHighlighter' | 'parseDiffOptions'>>;
364
+ type BaseDiffOptionsWithDefaults = Required<Omit<BaseDiffOptions, 'unsafeCSS' | 'preferredHighlighter' | 'parseDiffOptions' | 'loadDiffFiles'>>;
321
365
  type CustomPreProperties = Record<string, string | number | undefined>;
322
366
  interface PrePropertiesConfig extends Required<Pick<BaseDiffOptions, 'diffIndicators' | 'disableBackground' | 'disableLineNumbers' | 'overflow'>> {
323
367
  type: 'diff' | 'file';
@@ -366,6 +410,12 @@ type CodeViewFileItem<T = undefined> = {
366
410
  annotations?: LineAnnotation<T>[];
367
411
  version?: number;
368
412
  collapsed?: boolean;
413
+ /**
414
+ * Put this item into edit mode. Requires the CodeView `createEditor` option;
415
+ * ignored while `collapsed` is true. Make sure you bump the version when
416
+ * also changing the value.
417
+ */
418
+ edit?: boolean;
369
419
  };
370
420
  type CodeViewDiffItem<T = undefined> = {
371
421
  id: string;
@@ -374,6 +424,12 @@ type CodeViewDiffItem<T = undefined> = {
374
424
  annotations?: DiffLineAnnotation<T>[];
375
425
  version?: number;
376
426
  collapsed?: boolean;
427
+ /**
428
+ * Put this item into edit mode. Requires the CodeView `createEditor` option;
429
+ * ignored while `collapsed` is true. Make sure you bump the version when
430
+ * also changing the value.
431
+ */
432
+ edit?: boolean;
377
433
  };
378
434
  type CodeViewItem<T = undefined> = CodeViewFileItem<T> | CodeViewDiffItem<T>;
379
435
  interface CodeViewPositionScrollTarget {
@@ -491,12 +547,14 @@ interface ObservedGridNodes {
491
547
  numberElement: HTMLElement | null;
492
548
  codeWidth: number | 'auto';
493
549
  numberWidth: number;
550
+ applyColumnVariables: boolean;
494
551
  }
495
552
  type CodeColumnType = 'unified' | 'additions' | 'deletions';
496
553
  interface HunkData {
497
554
  slotName: string;
498
555
  hunkIndex: number;
499
556
  lines: number;
557
+ lineCountKnown: boolean;
500
558
  type: CodeColumnType;
501
559
  expandable?: {
502
560
  chunked: boolean;
@@ -718,15 +776,51 @@ interface DiffsBaseComponent {
718
776
  cleanUp(): void;
719
777
  }
720
778
  interface DiffsEditableComponent<LAnnotation> extends DiffsBaseComponent {
779
+ /**
780
+ * Return the position and height of a one-based line relative to this component.
781
+ * The host uses it to scroll to virtualized lines before their DOM nodes exist.
782
+ * A zero height means the line is not currently renderable.
783
+ * In a file diff, `lineNumber` is the line number in the new file.
784
+ */
785
+ getLinePosition?: (lineNumber: number) => {
786
+ top: number;
787
+ height: number;
788
+ } | undefined;
721
789
  attachEditor: (editor: DiffsEditor<LAnnotation>) => () => void;
722
790
  applyDocumentChange: (textDocument: DiffsTextDocument, newLineAnnotations?: DiffLineAnnotation<LAnnotation>[], shouldUpdateBuffer?: boolean) => void;
723
- updateRenderCache: (lines: Map<number, Array<HighlightedToken>>, themeType: 'dark' | 'light', shouldRefreshView?: boolean, skipDiffRecompute?: boolean) => void;
724
- rerenderFromDocument?: (textDocument: DiffsTextDocument) => void;
791
+ updateRenderCache: (lines: Map<number, Array<HighlightedToken>>, themeType: 'dark' | 'light', shouldRefreshView: boolean) => void;
725
792
  }
726
793
  interface DiffsEditor<LAnnotation> {
727
- __postponeBackgroundTokenizeToNextFrame(): void;
794
+ __postponeBgTokenizeToNextFrame(): void;
728
795
  __syncRenderView(highlighter: DiffsHighlighter, fileContainer: HTMLElement, fileOrDiff: FileContents | FileDiffMetadata, lineAnnotations: LineAnnotation<LAnnotation>[] | DiffLineAnnotation<LAnnotation>[] | undefined, renderRange: RenderRange | undefined): void;
729
- cleanUp(): void;
796
+ /**
797
+ * Detach from the host component and release all DOM-bound state. With
798
+ * `recycle` the editor keeps its parsed document, undo history, and file
799
+ * identity so a later `edit()` against the same file resumes where it left
800
+ * off — used when a virtualized host temporarily unmounts. Without it the
801
+ * editor fully resets and the next `edit()` rebuilds from host contents.
802
+ */
803
+ cleanUp(recycle?: boolean): void;
804
+ }
805
+ /**
806
+ * The editor surface CodeView drives for items in edit mode. Structurally
807
+ * matches the `Editor` class from `@pierre/diffs/editor` without importing it,
808
+ * keeping editor code out of the main entry. Apps supply instances through the
809
+ * CodeView `createEditor` option.
810
+ */
811
+ interface DiffsEditorHost<LAnnotation> extends DiffsEditor<LAnnotation> {
812
+ edit(fileInstance: DiffsEditableComponent<LAnnotation>): () => void;
813
+ }
814
+ /**
815
+ * Options CodeView passes to its `createEditor` factory. A structural subset
816
+ * of `EditorOptions` from `@pierre/diffs/editor`, so factories can spread
817
+ * them straight into the constructor — `new Editor({ ...options })` — and
818
+ * layer any editor configuration of their own on top. Forwarding `onChange`
819
+ * is what lets CodeView resolve document changes back to the owning item and
820
+ * emit them through its own `onItemEditChange` option.
821
+ */
822
+ interface CodeViewCreateEditorOptions<LAnnotation> {
823
+ onChange: (file: FileContents, lineAnnotations?: DiffLineAnnotation<LAnnotation>[]) => void;
730
824
  }
731
825
  interface DiffsEditorSelection {
732
826
  start: {
@@ -745,5 +839,5 @@ interface DiffsTextDocument {
745
839
  getText: () => string;
746
840
  }
747
841
  //#endregion
748
- export { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, type BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, type CodeToHastOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, type CreatePatchOptionsNonabortable, CustomPreProperties, type DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, type LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, type ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, type ThemeRegistration, type ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, type ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs };
842
+ export { AnnotationLineMap, AnnotationSide, AnnotationSpan, AppliedThemeStyleCache, BaseCodeOptions, BaseDiffOptions, BaseDiffOptionsWithDefaults, type BundledLanguage, ChangeContent, ChangeTypes, CodeColumnType, type CodeToHastOptions, CodeViewCreateEditorOptions, CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemScrollTarget, CodeViewLayout, CodeViewLineScrollTarget, CodeViewPositionScrollTarget, CodeViewRangeScrollTarget, CodeViewScrollBehavior, CodeViewScrollTarget, ConflictResolverTypes, ContextContent, type CreatePatchOptionsNonabortable, CustomPreProperties, type DecorationItem, DiffAcceptRejectHunkConfig, DiffAcceptRejectHunkType, DiffFileInput, DiffIndicators, DiffLineAnnotation, DiffLineEventBaseProps, DiffTokenEventBaseProps, DiffsBaseComponent, DiffsComponentOptions, DiffsEditableComponent, DiffsEditor, DiffsEditorHost, DiffsEditorSelection, DiffsHighlighter, DiffsTextDocument, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffContentsLoader, FileDiffLoadedChangedFiles, FileDiffLoadedFiles, FileDiffLoadedPureRenamedFile, FileDiffMetadata, FileHeaderRenderMode, ForceDiffPlainTextOptions, ForceFilePlainTextOptions, GapSpan, HighlightedToken, HighlighterTypes, Hunk, HunkData, HunkExpansionRegion, HunkLineType, HunkSeparators, type LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, MaybeDiffFileInput, MergeConflictActionPayload, MergeConflictMarkerRow, MergeConflictMarkerRowType, MergeConflictRegion, MergeConflictResolution, NumericScrollLineAnchor, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PendingCodeViewLayoutReset, PostRenderPhase, PrePropertiesConfig, ProcessFileConflictData, RenderDiffFilesResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderFilenameSuffixCallback, RenderHeaderMetadataCallback, RenderHeaderPrefixCallback, RenderRange, RenderWindow, RenderedDiffASTCache, RenderedFileASTCache, SelectedLineRange, SelectionPoint, SelectionSide, SharedRenderState, type ShikiTransformer, SmoothScrollSettings, StickySpecs, SupportedLanguages, type ThemeRegistration, type ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, type ThemedToken, ThemesType, TokenEventBase, VirtualFileMetrics, VirtualWindowSpecs };
749
843
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ //#region src/utils/applyLineTextWithNewline.d.ts
2
+ declare function applyLineTextWithNewline(line: string, lineText: string): string;
3
+ //#endregion
4
+ export { applyLineTextWithNewline };
5
+ //# sourceMappingURL=applyLineTextWithNewline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyLineTextWithNewline.d.ts","names":[],"sources":["../../src/utils/applyLineTextWithNewline.ts"],"mappings":";iBAIgB,wBAAA,CACd,IAAA,UACA,QAAgB"}
@@ -0,0 +1,11 @@
1
+ //#region src/utils/applyLineTextWithNewline.ts
2
+ function applyLineTextWithNewline(line, lineText) {
3
+ if (line.endsWith("\r\n")) return lineText + "\r\n";
4
+ if (line.endsWith("\r")) return lineText + "\r";
5
+ if (line.endsWith("\n")) return lineText + "\n";
6
+ return lineText;
7
+ }
8
+ //#endregion
9
+ export { applyLineTextWithNewline };
10
+
11
+ //# sourceMappingURL=applyLineTextWithNewline.js.map