{"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;AACnD,KAAI,YAAY,QAAQ,WAAW,QAAQ,WAAW,KACpD,YAAW,kBAAkB,SAAS,SAAS,SAAS,iBAAiB;AAE3E,KAAI,YAAY,KACd,OAAM,IAAI,MACR,mFACD;CAEH,MAAM,WAAW,IAAI,kBACnB,wBAAwB,QAAQ,CACjC;AACD,KAAI,eAAe,QAAQ,YAAY,SAAS,EAC9C,UAAS,mBAAmB,YAAY;AAE1C,QAAO,WACL,kBACE,MAAM,SAAS,YAAY,SAAS,EACpC,UACA,SAAS,WACT,SAAS,aAAa,SACvB,CACF;;AAGH,eAAsB,0BAAmD,EACvE,MACA,SACA,eAC6D;CAC7D,MAAM,EAAE,UAAU,SAAS,eAAe,+BACxC,MACA,SAAS,gBACV;CACD,MAAM,WAAW,IAAI,4BACnB,sCAAsC,QAAQ,CAC/C;AACD,KAAI,eAAe,QAAQ,YAAY,SAAS,EAC9C,UAAS,mBAAmB,YAAY;AAE1C,UAAS,iBAAiB,SAAS,YAAY,SAAS;AACxD,QAAO,WACL,kBACE,MAAM,SAAS,YAAY,SAAS,EACpC,UACA,SAAS,WACT,SAAS,aAAa,SACvB,CACF;;AAgBH,eAAsB,qBAA8C,EAClE,SACA,SACA,SACA,eAGA;AACA,QAAO;EACL;EACA;EACA;EACA;EACA,iBAAiB,MAAM,gBAAgB;GACrC;GACA;GACA;GACA;GACD,CAAC;EACH;;AAeH,eAAsB,gBAAyC,EAC7D,UACA,SACA,eAGA;AACA,QAAO;EACL;EACA;EACA;EACA,iBAAiB,MAAM,gBAAgB;GACrC;GACA;GACA;GACD,CAAC;EACH;;AAkBH,eAAsB,sBAA+C,EACnE,MACA,SACA,eAGA;AACA,QAAO;EACL;EACA;EACA;EACA,iBAAiB,MAAM,0BAA0B;GAC/C;GACA;GACA;GACD,CAAC;EACH;;AAeH,eAAsB,iBAA0C,EAC9D,OACA,SACA,eAGA;AAEA,QAAO;EACL;EACA;EACA;EACA,iBAAiB,MAAM,gBAAgB;GACrC,UANa,iBAAiB,MAAM;GAOpC;GACA;GACD,CAAC;EACH;;AAGH,SAAS,kBACP,YACA,UAGA,WACA,WACA;CACA,MAAM,WAAW,CAAC,mBAAmB,WAAW,KAAK,KAAK,CAAC;AAC3D,UAAS,KACP,wBACE,aACE,WAAW,aACX,WAAW,iBAAiB,UAC7B,CACF,CACF;AACD,KAAI,aAAa,KACf,UAAS,KAAK,mBAAmB,UAAU,CAAC;AAE9C,KAAI,WAAW,iBAAiB,KAC9B,UAAS,KAAK,WAAW,cAAc;CAEzC,MAAM,OAAO,SAAS,cAAc,WAAW;AAC/C,MAAK,WAAW,qBAAqB;AACrC,UAAS,KAAK,KAAK;AACnB,QAAO;;AAGT,SAAS,wBACP,SAC0B;AAC1B,QAAO;EACL,GAAG;EACH,kBACE,SAAS,sBAAsB,OAAO,WAAW;EACnD,gBACE,OAAO,SAAS,mBAAmB,aAC/B,WACA,SAAS;EAChB"}