@pierre/diffs
Version:
105 lines (104 loc) • 4.29 kB
JavaScript
import { wrapThemeCSS } from "../utils/cssWrappers.js";
import { shouldUseTokenTransformer } from "../utils/shouldUseTokenTransformer.js";
import { getDiffFileInput } from "../utils/getDiffFileInput.js";
import { parseDiffFromFile } from "../utils/parseDiffFromFile.js";
import { DiffHunksRenderer } from "../renderers/DiffHunksRenderer.js";
import { parseMergeConflictDiffFromFile } from "../utils/parseMergeConflictDiffFromFile.js";
import { UnresolvedFileHunksRenderer } from "../renderers/UnresolvedFileHunksRenderer.js";
import { getUnresolvedDiffHunksRendererOptions } from "../components/UnresolvedFile.js";
import { createStyleElement, createThemeStyleElement } from "../utils/createStyleElement.js";
import { getSingularPatch } from "../utils/getSingularPatch.js";
import { renderHTML } from "./renderHTML.js";
//#region src/ssr/preloadDiffs.ts
async function preloadDiffHTML({ fileDiff, oldFile, newFile, options, annotations }) {
const fileInput = getDiffFileInput({
oldFile,
newFile
}, "preloadDiffHTML");
if (fileDiff == null && fileInput != null) fileDiff = parseDiffFromFile(fileInput.oldFile, fileInput.newFile, options?.parseDiffOptions);
if (fileDiff == null) throw new Error("preloadFileDiff: You must pass at least a fileDiff, oldFile, or newFile prop");
const renderer = new DiffHunksRenderer(getHunksRendererOptions(options));
if (annotations != null && annotations.length > 0) renderer.setLineAnnotations(annotations);
return renderHTML(processHunkResult(await renderer.asyncRender(fileDiff), renderer, options?.unsafeCSS, options?.themeType ?? "system"));
}
async function preloadUnresolvedFileHTML({ file, options, annotations }) {
const { fileDiff, actions, markerRows } = parseMergeConflictDiffFromFile(file, options?.maxContextLines);
const renderer = new UnresolvedFileHunksRenderer(getUnresolvedDiffHunksRendererOptions(options));
if (annotations != null && annotations.length > 0) renderer.setLineAnnotations(annotations);
renderer.setConflictState(actions, markerRows, fileDiff);
return renderHTML(processHunkResult(await renderer.asyncRender(fileDiff), renderer, options?.unsafeCSS, options?.themeType ?? "system"));
}
async function preloadMultiFileDiff({ oldFile, newFile, options, annotations }) {
const fileInput = getDiffFileInput({
oldFile,
newFile
}, "preloadMultiFileDiff");
if (fileInput == null) throw new Error("preloadMultiFileDiff: You must pass oldFile, newFile, or both");
return {
...fileInput,
options,
annotations,
prerenderedHTML: await preloadDiffHTML({
...fileInput,
options,
annotations
})
};
}
async function preloadFileDiff({ fileDiff, options, annotations }) {
return {
fileDiff,
options,
annotations,
prerenderedHTML: await preloadDiffHTML({
fileDiff,
options,
annotations
})
};
}
async function preloadUnresolvedFile({ file, options, annotations }) {
return {
file,
options,
annotations,
prerenderedHTML: await preloadUnresolvedFileHTML({
file,
options,
annotations
})
};
}
async function preloadPatchDiff({ patch, options, annotations }) {
return {
patch,
options,
annotations,
prerenderedHTML: await preloadDiffHTML({
fileDiff: getSingularPatch(patch),
options,
annotations
})
};
}
function processHunkResult(hunkResult, renderer, unsafeCSS, themeType) {
const children = [createStyleElement(hunkResult.css, true)];
children.push(createThemeStyleElement(wrapThemeCSS(hunkResult.themeStyles, hunkResult.baseThemeType ?? themeType)));
if (unsafeCSS != null) children.push(createStyleElement(unsafeCSS));
if (hunkResult.headerElement != null) children.push(hunkResult.headerElement);
const code = renderer.renderFullAST(hunkResult);
code.properties["data-dehydrated"] = "";
children.push(code);
return children;
}
function getHunksRendererOptions(options) {
return {
...options,
useTokenTransformer: shouldUseTokenTransformer(options),
headerRenderMode: options?.renderCustomHeader != null ? "custom" : "default",
hunkSeparators: typeof options?.hunkSeparators === "function" ? "custom" : options?.hunkSeparators
};
}
//#endregion
export { preloadDiffHTML, preloadFileDiff, preloadMultiFileDiff, preloadPatchDiff, preloadUnresolvedFile, preloadUnresolvedFileHTML };
//# sourceMappingURL=preloadDiffs.js.map