@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyLineTextWithNewline.js","names":[],"sources":["../../src/utils/applyLineTextWithNewline.ts"],"sourcesContent":["// Editor token text omits line endings; renderer line caches (diff\n// `additionLines`, FileRenderer's split-line cache) keep the suffix from\n// parsing. Re-apply the previous line's ending so edited text can be written\n// back into those caches without corrupting reconstructed file contents.\nexport function applyLineTextWithNewline(\n line: string,\n lineText: string\n): string {\n if (line.endsWith('\\r\\n')) {\n return lineText + '\\r\\n';\n }\n if (line.endsWith('\\r')) {\n return lineText + '\\r';\n }\n if (line.endsWith('\\n')) {\n return lineText + '\\n';\n }\n return lineText;\n}\n"],"mappings":";AAIA,SAAgB,yBACd,MACA,UACQ;CACR,IAAI,KAAK,SAAS,MAAM,GACtB,OAAO,WAAW;CAEpB,IAAI,KAAK,SAAS,IAAI,GACpB,OAAO,WAAW;CAEpB,IAAI,KAAK,SAAS,IAAI,GACpB,OAAO,WAAW;CAEpB,OAAO;AACT"}
@@ -1,6 +1,6 @@
1
1
  //#region src/utils/areHunkDataEqual.ts
2
2
  function areHunkDataEqual(hunkA, hunkB) {
3
- return hunkA.slotName === hunkB.slotName && hunkA.hunkIndex === hunkB.hunkIndex && hunkA.lines === hunkB.lines && hunkA.type === hunkB.type && hunkA.expandable?.chunked === hunkB.expandable?.chunked && hunkA.expandable?.up === hunkB.expandable?.up && hunkA.expandable?.down === hunkB.expandable?.down;
3
+ return hunkA.slotName === hunkB.slotName && hunkA.hunkIndex === hunkB.hunkIndex && hunkA.lines === hunkB.lines && hunkA.lineCountKnown === hunkB.lineCountKnown && hunkA.type === hunkB.type && hunkA.expandable?.chunked === hunkB.expandable?.chunked && hunkA.expandable?.up === hunkB.expandable?.up && hunkA.expandable?.down === hunkB.expandable?.down;
4
4
  }
5
5
  //#endregion
6
6
  export { areHunkDataEqual };
@@ -1 +1 @@
1
- {"version":3,"file":"areHunkDataEqual.js","names":[],"sources":["../../src/utils/areHunkDataEqual.ts"],"sourcesContent":["import type { HunkData } from '../types';\n\nexport function areHunkDataEqual(hunkA: HunkData, hunkB: HunkData): boolean {\n return (\n hunkA.slotName === hunkB.slotName &&\n hunkA.hunkIndex === hunkB.hunkIndex &&\n hunkA.lines === hunkB.lines &&\n hunkA.type === hunkB.type &&\n hunkA.expandable?.chunked === hunkB.expandable?.chunked &&\n hunkA.expandable?.up === hunkB.expandable?.up &&\n hunkA.expandable?.down === hunkB.expandable?.down\n );\n}\n"],"mappings":";AAEA,SAAgB,iBAAiB,OAAiB,OAA0B;CAC1E,OACE,MAAM,aAAa,MAAM,YACzB,MAAM,cAAc,MAAM,aAC1B,MAAM,UAAU,MAAM,SACtB,MAAM,SAAS,MAAM,QACrB,MAAM,YAAY,YAAY,MAAM,YAAY,WAChD,MAAM,YAAY,OAAO,MAAM,YAAY,MAC3C,MAAM,YAAY,SAAS,MAAM,YAAY;AAEjD"}
1
+ {"version":3,"file":"areHunkDataEqual.js","names":[],"sources":["../../src/utils/areHunkDataEqual.ts"],"sourcesContent":["import type { HunkData } from '../types';\n\nexport function areHunkDataEqual(hunkA: HunkData, hunkB: HunkData): boolean {\n return (\n hunkA.slotName === hunkB.slotName &&\n hunkA.hunkIndex === hunkB.hunkIndex &&\n hunkA.lines === hunkB.lines &&\n hunkA.lineCountKnown === hunkB.lineCountKnown &&\n hunkA.type === hunkB.type &&\n hunkA.expandable?.chunked === hunkB.expandable?.chunked &&\n hunkA.expandable?.up === hunkB.expandable?.up &&\n hunkA.expandable?.down === hunkB.expandable?.down\n );\n}\n"],"mappings":";AAEA,SAAgB,iBAAiB,OAAiB,OAA0B;CAC1E,OACE,MAAM,aAAa,MAAM,YACzB,MAAM,cAAc,MAAM,aAC1B,MAAM,UAAU,MAAM,SACtB,MAAM,mBAAmB,MAAM,kBAC/B,MAAM,SAAS,MAAM,QACrB,MAAM,YAAY,YAAY,MAAM,YAAY,WAChD,MAAM,YAAY,OAAO,MAAM,YAAY,MAC3C,MAAM,YAAY,SAAS,MAAM,YAAY;AAEjD"}
@@ -1,7 +1,7 @@
1
- import { CodeViewRenderedItem } from "../components/CodeView.js";
1
+ import { CodeViewSlotSnapshot } from "../components/CodeView.js";
2
2
 
3
3
  //#region src/utils/areManagedSnapshotsEqual.d.ts
4
- declare function areManagedSnapshotsEqual<LAnnotation>(previous: CodeViewRenderedItem<LAnnotation>[] | undefined, next: CodeViewRenderedItem<LAnnotation>[] | undefined): boolean;
4
+ declare function areManagedSnapshotsEqual<LAnnotation>(previous: CodeViewSlotSnapshot<LAnnotation> | undefined, next: CodeViewSlotSnapshot<LAnnotation> | undefined): boolean;
5
5
  //#endregion
6
6
  export { areManagedSnapshotsEqual };
7
7
  //# sourceMappingURL=areManagedSnapshotsEqual.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"areManagedSnapshotsEqual.d.ts","names":[],"sources":["../../src/utils/areManagedSnapshotsEqual.ts"],"mappings":";;;iBAEgB,wBAAA,cACd,QAAA,EAAU,oBAAA,CAAqB,WAAA,iBAC/B,IAAA,EAAM,oBAAA,CAAqB,WAAA"}
1
+ {"version":3,"file":"areManagedSnapshotsEqual.d.ts","names":[],"sources":["../../src/utils/areManagedSnapshotsEqual.ts"],"mappings":";;;iBAKgB,wBAAA,cACd,QAAA,EAAU,oBAAA,CAAqB,WAAA,eAC/B,IAAA,EAAM,oBAAA,CAAqB,WAAA"}
@@ -1,5 +1,10 @@
1
1
  //#region src/utils/areManagedSnapshotsEqual.ts
2
2
  function areManagedSnapshotsEqual(previous, next) {
3
+ if (previous == null || next == null) return previous === next;
4
+ if (previous.header !== next.header || previous.footer !== next.footer) return false;
5
+ return areRenderedItemsEqual(previous.items, next.items);
6
+ }
7
+ function areRenderedItemsEqual(previous, next) {
3
8
  if (previous == null || next == null) return previous === next;
4
9
  if (previous.length !== next.length) return false;
5
10
  for (let index = 0; index < previous.length; index++) {
@@ -1 +1 @@
1
- {"version":3,"file":"areManagedSnapshotsEqual.js","names":[],"sources":["../../src/utils/areManagedSnapshotsEqual.ts"],"sourcesContent":["import type { CodeViewRenderedItem } from '../components/CodeView';\n\nexport function areManagedSnapshotsEqual<LAnnotation>(\n previous: CodeViewRenderedItem<LAnnotation>[] | undefined,\n next: CodeViewRenderedItem<LAnnotation>[] | undefined\n): boolean {\n if (previous == null || next == null) {\n return previous === next;\n }\n\n if (previous.length !== next.length) {\n return false;\n }\n\n for (let index = 0; index < previous.length; index++) {\n const previousItem = previous[index];\n const nextItem = next[index];\n if (\n previousItem == null ||\n nextItem == null ||\n previousItem.id !== nextItem.id ||\n previousItem.type !== nextItem.type ||\n previousItem.element !== nextItem.element ||\n previousItem.version !== nextItem.version\n ) {\n return false;\n }\n }\n\n return true;\n}\n"],"mappings":";AAEA,SAAgB,yBACd,UACA,MACS;CACT,IAAI,YAAY,QAAQ,QAAQ,MAC9B,OAAO,aAAa;CAGtB,IAAI,SAAS,WAAW,KAAK,QAC3B,OAAO;CAGT,KAAK,IAAI,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS;EACpD,MAAM,eAAe,SAAS;EAC9B,MAAM,WAAW,KAAK;EACtB,IACE,gBAAgB,QAChB,YAAY,QACZ,aAAa,OAAO,SAAS,MAC7B,aAAa,SAAS,SAAS,QAC/B,aAAa,YAAY,SAAS,WAClC,aAAa,YAAY,SAAS,SAElC,OAAO;CAEX;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"areManagedSnapshotsEqual.js","names":[],"sources":["../../src/utils/areManagedSnapshotsEqual.ts"],"sourcesContent":["import type {\n CodeViewRenderedItem,\n CodeViewSlotSnapshot,\n} from '../components/CodeView';\n\nexport function areManagedSnapshotsEqual<LAnnotation>(\n previous: CodeViewSlotSnapshot<LAnnotation> | undefined,\n next: CodeViewSlotSnapshot<LAnnotation> | undefined\n): boolean {\n if (previous == null || next == null) {\n return previous === next;\n }\n\n if (previous.header !== next.header || previous.footer !== next.footer) {\n return false;\n }\n\n return areRenderedItemsEqual(previous.items, next.items);\n}\n\nfunction areRenderedItemsEqual<LAnnotation>(\n previous: CodeViewRenderedItem<LAnnotation>[] | undefined,\n next: CodeViewRenderedItem<LAnnotation>[] | undefined\n): boolean {\n if (previous == null || next == null) {\n return previous === next;\n }\n\n if (previous.length !== next.length) {\n return false;\n }\n\n for (let index = 0; index < previous.length; index++) {\n const previousItem = previous[index];\n const nextItem = next[index];\n if (\n previousItem == null ||\n nextItem == null ||\n previousItem.id !== nextItem.id ||\n previousItem.type !== nextItem.type ||\n previousItem.element !== nextItem.element ||\n previousItem.version !== nextItem.version\n ) {\n return false;\n }\n }\n\n return true;\n}\n"],"mappings":";AAKA,SAAgB,yBACd,UACA,MACS;CACT,IAAI,YAAY,QAAQ,QAAQ,MAC9B,OAAO,aAAa;CAGtB,IAAI,SAAS,WAAW,KAAK,UAAU,SAAS,WAAW,KAAK,QAC9D,OAAO;CAGT,OAAO,sBAAsB,SAAS,OAAO,KAAK,KAAK;AACzD;AAEA,SAAS,sBACP,UACA,MACS;CACT,IAAI,YAAY,QAAQ,QAAQ,MAC9B,OAAO,aAAa;CAGtB,IAAI,SAAS,WAAW,KAAK,QAC3B,OAAO;CAGT,KAAK,IAAI,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS;EACpD,MAAM,eAAe,SAAS;EAC9B,MAAM,WAAW,KAAK;EACtB,IACE,gBAAgB,QAChB,YAAY,QACZ,aAAa,OAAO,SAAS,MAC7B,aAAa,SAAS,SAAS,QAC/B,aAAa,YAAY,SAAS,WAClC,aAAa,YAAY,SAAS,SAElC,OAAO;CAEX;CAEA,OAAO;AACT"}
@@ -0,0 +1,5 @@
1
+ //#region src/utils/awaitWithTimeout.d.ts
2
+ declare function awaitWithTimeout(callback: () => Promise<unknown>, timeout?: number): Promise<void>;
3
+ //#endregion
4
+ export { awaitWithTimeout };
5
+ //# sourceMappingURL=awaitWithTimeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awaitWithTimeout.d.ts","names":[],"sources":["../../src/utils/awaitWithTimeout.ts"],"mappings":";iBAAsB,gBAAA,CACpB,QAAA,QAAgB,OAAA,WAChB,OAAA,YACC,OAAO"}
@@ -0,0 +1,15 @@
1
+ //#region src/utils/awaitWithTimeout.ts
2
+ async function awaitWithTimeout(callback, timeout = 300) {
3
+ let timeoutId;
4
+ try {
5
+ await Promise.race([callback(), new Promise((resolve) => {
6
+ timeoutId = setTimeout(resolve, timeout);
7
+ })]);
8
+ } finally {
9
+ if (timeoutId != null) clearTimeout(timeoutId);
10
+ }
11
+ }
12
+ //#endregion
13
+ export { awaitWithTimeout };
14
+
15
+ //# sourceMappingURL=awaitWithTimeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awaitWithTimeout.js","names":[],"sources":["../../src/utils/awaitWithTimeout.ts"],"sourcesContent":["export async function awaitWithTimeout(\n callback: () => Promise<unknown>,\n timeout: number = 300\n): Promise<void> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n try {\n await Promise.race([\n callback(),\n new Promise<void>((resolve) => {\n timeoutId = setTimeout(resolve, timeout);\n }),\n ]);\n } finally {\n if (timeoutId != null) {\n clearTimeout(timeoutId);\n }\n }\n}\n"],"mappings":";AAAA,eAAsB,iBACpB,UACA,UAAkB,KACH;CACf,IAAI;CACJ,IAAI;EACF,MAAM,QAAQ,KAAK,CACjB,SAAS,GACT,IAAI,SAAe,YAAY;GAC7B,YAAY,WAAW,SAAS,OAAO;EACzC,CAAC,CACH,CAAC;CACH,UAAU;EACR,IAAI,aAAa,MACf,aAAa,SAAS;CAE1B;AACF"}
@@ -0,0 +1,7 @@
1
+ import { FileDiffMetadata } from "../types.js";
2
+
3
+ //#region src/utils/cloneFileDiffMetadata.d.ts
4
+ declare function cloneFileDiffMetadata(fileDiff: FileDiffMetadata): FileDiffMetadata;
5
+ //#endregion
6
+ export { cloneFileDiffMetadata };
7
+ //# sourceMappingURL=cloneFileDiffMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloneFileDiffMetadata.d.ts","names":[],"sources":["../../src/utils/cloneFileDiffMetadata.ts"],"mappings":";;;iBAEgB,qBAAA,CACd,QAAA,EAAU,gBAAA,GACT,gBAAgB"}
@@ -0,0 +1,16 @@
1
+ //#region src/utils/cloneFileDiffMetadata.ts
2
+ function cloneFileDiffMetadata(fileDiff) {
3
+ return {
4
+ ...fileDiff,
5
+ hunks: fileDiff.hunks.map((hunk) => ({
6
+ ...hunk,
7
+ hunkContent: hunk.hunkContent.map((content) => ({ ...content }))
8
+ })),
9
+ deletionLines: [...fileDiff.deletionLines],
10
+ additionLines: [...fileDiff.additionLines]
11
+ };
12
+ }
13
+ //#endregion
14
+ export { cloneFileDiffMetadata };
15
+
16
+ //# sourceMappingURL=cloneFileDiffMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloneFileDiffMetadata.js","names":[],"sources":["../../src/utils/cloneFileDiffMetadata.ts"],"sourcesContent":["import type { FileDiffMetadata } from '../types';\n\nexport function cloneFileDiffMetadata(\n fileDiff: FileDiffMetadata\n): FileDiffMetadata {\n return {\n ...fileDiff,\n hunks: fileDiff.hunks.map((hunk) => ({\n ...hunk,\n hunkContent: hunk.hunkContent.map((content) => ({ ...content })),\n })),\n deletionLines: [...fileDiff.deletionLines],\n additionLines: [...fileDiff.additionLines],\n };\n}\n"],"mappings":";AAEA,SAAgB,sBACd,UACkB;CAClB,OAAO;EACL,GAAG;EACH,OAAO,SAAS,MAAM,KAAK,UAAU;GACnC,GAAG;GACH,aAAa,KAAK,YAAY,KAAK,aAAa,EAAE,GAAG,QAAQ,EAAE;EACjE,EAAE;EACF,eAAe,CAAC,GAAG,SAAS,aAAa;EACzC,eAAe,CAAC,GAAG,SAAS,aAAa;CAC3C;AACF"}
@@ -9,6 +9,7 @@ interface ComputeEstimatedDiffHeightsOptions {
9
9
  expandUnchanged: boolean;
10
10
  expandedHunks: Map<number, HunkExpansionRegion> | true | undefined;
11
11
  collapsedContextThreshold: number;
12
+ canHydratePartialDiff: boolean;
12
13
  }
13
14
  interface EstimatedDiffHeights {
14
15
  splitHeight: number;
@@ -21,7 +22,8 @@ declare function computeEstimatedDiffHeights({
21
22
  hunkSeparators,
22
23
  expandUnchanged,
23
24
  expandedHunks: configuredExpandedHunks,
24
- collapsedContextThreshold
25
+ collapsedContextThreshold,
26
+ canHydratePartialDiff
25
27
  }: ComputeEstimatedDiffHeightsOptions): EstimatedDiffHeights;
26
28
  //#endregion
27
29
  export { ComputeEstimatedDiffHeightsOptions, EstimatedDiffHeights, computeEstimatedDiffHeights };
@@ -1 +1 @@
1
- {"version":3,"file":"computeEstimatedDiffHeights.d.ts","names":[],"sources":["../../src/utils/computeEstimatedDiffHeights.ts"],"mappings":";;;UAmBiB,kCAAA;EACf,QAAA,EAAU,gBAAA;EACV,OAAA,EAAS,kBAAA;EACT,iBAAA;EACA,cAAA,EAAgB,cAAA;EAChB,eAAA;EACA,aAAA,EAAe,GAAA,SAAY,mBAAA;EAC3B,yBAAA;AAAA;AAAA,UAGe,oBAAA;EACf,WAAA;EACA,aAAa;AAAA;AAAA,iBAKC,2BAAA;EACd,QAAA;EACA,OAAA;EACA,iBAAA;EACA,cAAA;EACA,eAAA;EACA,aAAA,EAAe,uBAAA;EACf;AAAA,GACC,kCAAA,GAAqC,oBAAA"}
1
+ {"version":3,"file":"computeEstimatedDiffHeights.d.ts","names":[],"sources":["../../src/utils/computeEstimatedDiffHeights.ts"],"mappings":";;;UAmBiB,kCAAA;EACf,QAAA,EAAU,gBAAA;EACV,OAAA,EAAS,kBAAA;EACT,iBAAA;EACA,cAAA,EAAgB,cAAA;EAChB,eAAA;EACA,aAAA,EAAe,GAAA,SAAY,mBAAA;EAC3B,yBAAA;EACA,qBAAA;AAAA;AAAA,UAGe,oBAAA;EACf,WAAA;EACA,aAAa;AAAA;AAAA,iBAKC,2BAAA;EACd,QAAA;EACA,OAAA;EACA,iBAAA;EACA,cAAA;EACA,eAAA;EACA,aAAA,EAAe,uBAAA;EACf,yBAAA;EACA;AAAA,GACC,kCAAA,GAAqC,oBAAA"}
@@ -1,7 +1,7 @@
1
1
  import { getVirtualFileHeaderRegion, getVirtualFilePaddingBottom } from "./computeVirtualFileMetrics.js";
2
2
  import { getExpandedRegion, getLeadingHunkSeparatorLayout, getTrailingExpandedRegion, getTrailingHunkSeparatorLayout } from "./virtualDiffLayout.js";
3
3
  //#region src/utils/computeEstimatedDiffHeights.ts
4
- function computeEstimatedDiffHeights({ fileDiff, metrics, disableFileHeader, hunkSeparators, expandUnchanged, expandedHunks: configuredExpandedHunks, collapsedContextThreshold }) {
4
+ function computeEstimatedDiffHeights({ fileDiff, metrics, disableFileHeader, hunkSeparators, expandUnchanged, expandedHunks: configuredExpandedHunks, collapsedContextThreshold, canHydratePartialDiff }) {
5
5
  let splitHeight = getVirtualFileHeaderRegion(metrics, disableFileHeader);
6
6
  let unifiedHeight = splitHeight;
7
7
  const expandedHunks = expandUnchanged ? true : configuredExpandedHunks;
@@ -53,6 +53,13 @@ function computeEstimatedDiffHeights({ fileDiff, metrics, disableFileHeader, hun
53
53
  splitHeight += separatorHeight;
54
54
  unifiedHeight += separatorHeight;
55
55
  }
56
+ } else if (hunkIndex === finalHunkIndex && fileDiff.isPartial && canHydratePartialDiff) {
57
+ const separatorHeight = getTrailingHunkSeparatorLayout({
58
+ type: hunkSeparators,
59
+ metrics
60
+ })?.totalHeight ?? 0;
61
+ splitHeight += separatorHeight;
62
+ unifiedHeight += separatorHeight;
56
63
  }
57
64
  }
58
65
  if (fileDiff.hunks.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"computeEstimatedDiffHeights.js","names":[],"sources":["../../src/utils/computeEstimatedDiffHeights.ts"],"sourcesContent":["import type {\n ChangeContent,\n FileDiffMetadata,\n Hunk,\n HunkExpansionRegion,\n HunkSeparators,\n VirtualFileMetrics,\n} from '../types';\nimport {\n getVirtualFileHeaderRegion,\n getVirtualFilePaddingBottom,\n} from './computeVirtualFileMetrics';\nimport {\n getExpandedRegion,\n getLeadingHunkSeparatorLayout,\n getTrailingExpandedRegion,\n getTrailingHunkSeparatorLayout,\n} from './virtualDiffLayout';\n\nexport interface ComputeEstimatedDiffHeightsOptions {\n fileDiff: FileDiffMetadata;\n metrics: VirtualFileMetrics;\n disableFileHeader: boolean;\n hunkSeparators: HunkSeparators;\n expandUnchanged: boolean;\n expandedHunks: Map<number, HunkExpansionRegion> | true | undefined;\n collapsedContextThreshold: number;\n}\n\nexport interface EstimatedDiffHeights {\n splitHeight: number;\n unifiedHeight: number;\n}\n\n// Computes both split and unified baseline heights from hunk-level metadata so\n// callers can avoid replaying the detailed rendered-line iterator.\nexport function computeEstimatedDiffHeights({\n fileDiff,\n metrics,\n disableFileHeader,\n hunkSeparators,\n expandUnchanged,\n expandedHunks: configuredExpandedHunks,\n collapsedContextThreshold,\n}: ComputeEstimatedDiffHeightsOptions): EstimatedDiffHeights {\n let splitHeight = getVirtualFileHeaderRegion(metrics, disableFileHeader);\n let unifiedHeight = splitHeight;\n const expandedHunks = expandUnchanged ? true : configuredExpandedHunks;\n const finalHunkIndex = fileDiff.hunks.length - 1;\n\n for (let hunkIndex = 0; hunkIndex < fileDiff.hunks.length; hunkIndex++) {\n const hunk = fileDiff.hunks[hunkIndex];\n if (hunk == null) {\n throw new Error('computeEstimatedDiffHeights: invalid hunk index');\n }\n\n const leadingRegion = getExpandedRegion({\n isPartial: fileDiff.isPartial,\n rangeSize: hunk.collapsedBefore,\n expandedHunks,\n hunkIndex,\n collapsedContextThreshold,\n });\n const leadingExpandedHeight =\n (leadingRegion.fromStart + leadingRegion.fromEnd) * metrics.lineHeight;\n splitHeight += leadingExpandedHeight;\n unifiedHeight += leadingExpandedHeight;\n\n if (leadingRegion.collapsedLines > 0) {\n const separatorHeight =\n getLeadingHunkSeparatorLayout({\n type: hunkSeparators,\n metrics,\n hunkIndex,\n hunkSpecs: hunk.hunkSpecs,\n })?.totalHeight ?? 0;\n splitHeight += separatorHeight;\n unifiedHeight += separatorHeight;\n }\n\n splitHeight += hunk.splitLineCount * metrics.lineHeight;\n unifiedHeight += hunk.unifiedLineCount * metrics.lineHeight;\n\n const metadataLineCounts = getNoNewlineMetadataLineCounts(hunk);\n splitHeight += metadataLineCounts.split * metrics.lineHeight;\n unifiedHeight += metadataLineCounts.unified * metrics.lineHeight;\n\n const trailingRegion =\n hunkIndex === finalHunkIndex\n ? getTrailingExpandedRegion({\n fileDiff,\n hunkIndex,\n expandedHunks,\n collapsedContextThreshold,\n errorPrefix: 'computeEstimatedDiffHeights',\n })\n : undefined;\n if (trailingRegion != null) {\n const trailingExpandedHeight =\n (trailingRegion.fromStart + trailingRegion.fromEnd) *\n metrics.lineHeight;\n splitHeight += trailingExpandedHeight;\n unifiedHeight += trailingExpandedHeight;\n\n if (trailingRegion.collapsedLines > 0) {\n const separatorHeight =\n getTrailingHunkSeparatorLayout({\n type: hunkSeparators,\n metrics,\n })?.totalHeight ?? 0;\n splitHeight += separatorHeight;\n unifiedHeight += separatorHeight;\n }\n }\n }\n\n if (fileDiff.hunks.length > 0) {\n const paddingBottom = getVirtualFilePaddingBottom(metrics);\n splitHeight += paddingBottom;\n unifiedHeight += paddingBottom;\n }\n\n return { splitHeight, unifiedHeight };\n}\n\nfunction getNoNewlineMetadataLineCounts(hunk: Hunk): {\n split: number;\n unified: number;\n} {\n if (!hunk.noEOFCRAdditions && !hunk.noEOFCRDeletions) {\n return { split: 0, unified: 0 };\n }\n\n const lastContent = hunk.hunkContent.at(-1);\n if (lastContent == null) {\n return { split: 0, unified: 0 };\n }\n\n if (lastContent.type === 'context') {\n const metadataRows = lastContent.lines > 0 ? 1 : 0;\n return { split: metadataRows, unified: metadataRows };\n }\n\n return getChangeNoNewlineMetadataLineCounts(hunk, lastContent);\n}\nfunction getChangeNoNewlineMetadataLineCounts(\n hunk: Hunk,\n content: ChangeContent\n): { split: number; unified: number } {\n const unified =\n (content.deletions > 0 && hunk.noEOFCRDeletions ? 1 : 0) +\n (content.additions > 0 && hunk.noEOFCRAdditions ? 1 : 0);\n const splitDeletionHasMetadata =\n content.deletions > 0 && hunk.noEOFCRDeletions;\n const splitAdditionHasMetadata =\n content.additions > 0 && hunk.noEOFCRAdditions;\n const split = splitDeletionHasMetadata || splitAdditionHasMetadata ? 1 : 0;\n\n return { split, unified };\n}\n"],"mappings":";;;AAoCA,SAAgB,4BAA4B,EAC1C,UACA,SACA,mBACA,gBACA,iBACA,eAAe,yBACf,6BAC2D;CAC3D,IAAI,cAAc,2BAA2B,SAAS,iBAAiB;CACvE,IAAI,gBAAgB;CACpB,MAAM,gBAAgB,kBAAkB,OAAO;CAC/C,MAAM,iBAAiB,SAAS,MAAM,SAAS;CAE/C,KAAK,IAAI,YAAY,GAAG,YAAY,SAAS,MAAM,QAAQ,aAAa;EACtE,MAAM,OAAO,SAAS,MAAM;EAC5B,IAAI,QAAQ,MACV,MAAM,IAAI,MAAM,iDAAiD;EAGnE,MAAM,gBAAgB,kBAAkB;GACtC,WAAW,SAAS;GACpB,WAAW,KAAK;GAChB;GACA;GACA;EACF,CAAC;EACD,MAAM,yBACH,cAAc,YAAY,cAAc,WAAW,QAAQ;EAC9D,eAAe;EACf,iBAAiB;EAEjB,IAAI,cAAc,iBAAiB,GAAG;GACpC,MAAM,kBACJ,8BAA8B;IAC5B,MAAM;IACN;IACA;IACA,WAAW,KAAK;GAClB,CAAC,CAAC,EAAE,eAAe;GACrB,eAAe;GACf,iBAAiB;EACnB;EAEA,eAAe,KAAK,iBAAiB,QAAQ;EAC7C,iBAAiB,KAAK,mBAAmB,QAAQ;EAEjD,MAAM,qBAAqB,+BAA+B,IAAI;EAC9D,eAAe,mBAAmB,QAAQ,QAAQ;EAClD,iBAAiB,mBAAmB,UAAU,QAAQ;EAEtD,MAAM,iBACJ,cAAc,iBACV,0BAA0B;GACxB;GACA;GACA;GACA;GACA,aAAa;EACf,CAAC,IACD,KAAA;EACN,IAAI,kBAAkB,MAAM;GAC1B,MAAM,0BACH,eAAe,YAAY,eAAe,WAC3C,QAAQ;GACV,eAAe;GACf,iBAAiB;GAEjB,IAAI,eAAe,iBAAiB,GAAG;IACrC,MAAM,kBACJ,+BAA+B;KAC7B,MAAM;KACN;IACF,CAAC,CAAC,EAAE,eAAe;IACrB,eAAe;IACf,iBAAiB;GACnB;EACF;CACF;CAEA,IAAI,SAAS,MAAM,SAAS,GAAG;EAC7B,MAAM,gBAAgB,4BAA4B,OAAO;EACzD,eAAe;EACf,iBAAiB;CACnB;CAEA,OAAO;EAAE;EAAa;CAAc;AACtC;AAEA,SAAS,+BAA+B,MAGtC;CACA,IAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,kBAClC,OAAO;EAAE,OAAO;EAAG,SAAS;CAAE;CAGhC,MAAM,cAAc,KAAK,YAAY,GAAG,EAAE;CAC1C,IAAI,eAAe,MACjB,OAAO;EAAE,OAAO;EAAG,SAAS;CAAE;CAGhC,IAAI,YAAY,SAAS,WAAW;EAClC,MAAM,eAAe,YAAY,QAAQ,IAAI,IAAI;EACjD,OAAO;GAAE,OAAO;GAAc,SAAS;EAAa;CACtD;CAEA,OAAO,qCAAqC,MAAM,WAAW;AAC/D;AACA,SAAS,qCACP,MACA,SACoC;CACpC,MAAM,WACH,QAAQ,YAAY,KAAK,KAAK,mBAAmB,IAAI,MACrD,QAAQ,YAAY,KAAK,KAAK,mBAAmB,IAAI;CACxD,MAAM,2BACJ,QAAQ,YAAY,KAAK,KAAK;CAChC,MAAM,2BACJ,QAAQ,YAAY,KAAK,KAAK;CAGhC,OAAO;EAAE,OAFK,4BAA4B,2BAA2B,IAAI;EAEzD;CAAQ;AAC1B"}
1
+ {"version":3,"file":"computeEstimatedDiffHeights.js","names":[],"sources":["../../src/utils/computeEstimatedDiffHeights.ts"],"sourcesContent":["import type {\n ChangeContent,\n FileDiffMetadata,\n Hunk,\n HunkExpansionRegion,\n HunkSeparators,\n VirtualFileMetrics,\n} from '../types';\nimport {\n getVirtualFileHeaderRegion,\n getVirtualFilePaddingBottom,\n} from './computeVirtualFileMetrics';\nimport {\n getExpandedRegion,\n getLeadingHunkSeparatorLayout,\n getTrailingExpandedRegion,\n getTrailingHunkSeparatorLayout,\n} from './virtualDiffLayout';\n\nexport interface ComputeEstimatedDiffHeightsOptions {\n fileDiff: FileDiffMetadata;\n metrics: VirtualFileMetrics;\n disableFileHeader: boolean;\n hunkSeparators: HunkSeparators;\n expandUnchanged: boolean;\n expandedHunks: Map<number, HunkExpansionRegion> | true | undefined;\n collapsedContextThreshold: number;\n canHydratePartialDiff: boolean;\n}\n\nexport interface EstimatedDiffHeights {\n splitHeight: number;\n unifiedHeight: number;\n}\n\n// Computes both split and unified baseline heights from hunk-level metadata so\n// callers can avoid replaying the detailed rendered-line iterator.\nexport function computeEstimatedDiffHeights({\n fileDiff,\n metrics,\n disableFileHeader,\n hunkSeparators,\n expandUnchanged,\n expandedHunks: configuredExpandedHunks,\n collapsedContextThreshold,\n canHydratePartialDiff,\n}: ComputeEstimatedDiffHeightsOptions): EstimatedDiffHeights {\n let splitHeight = getVirtualFileHeaderRegion(metrics, disableFileHeader);\n let unifiedHeight = splitHeight;\n const expandedHunks = expandUnchanged ? true : configuredExpandedHunks;\n const finalHunkIndex = fileDiff.hunks.length - 1;\n\n for (let hunkIndex = 0; hunkIndex < fileDiff.hunks.length; hunkIndex++) {\n const hunk = fileDiff.hunks[hunkIndex];\n if (hunk == null) {\n throw new Error('computeEstimatedDiffHeights: invalid hunk index');\n }\n\n const leadingRegion = getExpandedRegion({\n isPartial: fileDiff.isPartial,\n rangeSize: hunk.collapsedBefore,\n expandedHunks,\n hunkIndex,\n collapsedContextThreshold,\n });\n const leadingExpandedHeight =\n (leadingRegion.fromStart + leadingRegion.fromEnd) * metrics.lineHeight;\n splitHeight += leadingExpandedHeight;\n unifiedHeight += leadingExpandedHeight;\n\n if (leadingRegion.collapsedLines > 0) {\n const separatorHeight =\n getLeadingHunkSeparatorLayout({\n type: hunkSeparators,\n metrics,\n hunkIndex,\n hunkSpecs: hunk.hunkSpecs,\n })?.totalHeight ?? 0;\n splitHeight += separatorHeight;\n unifiedHeight += separatorHeight;\n }\n\n splitHeight += hunk.splitLineCount * metrics.lineHeight;\n unifiedHeight += hunk.unifiedLineCount * metrics.lineHeight;\n\n const metadataLineCounts = getNoNewlineMetadataLineCounts(hunk);\n splitHeight += metadataLineCounts.split * metrics.lineHeight;\n unifiedHeight += metadataLineCounts.unified * metrics.lineHeight;\n\n const trailingRegion =\n hunkIndex === finalHunkIndex\n ? getTrailingExpandedRegion({\n fileDiff,\n hunkIndex,\n expandedHunks,\n collapsedContextThreshold,\n errorPrefix: 'computeEstimatedDiffHeights',\n })\n : undefined;\n if (trailingRegion != null) {\n const trailingExpandedHeight =\n (trailingRegion.fromStart + trailingRegion.fromEnd) *\n metrics.lineHeight;\n splitHeight += trailingExpandedHeight;\n unifiedHeight += trailingExpandedHeight;\n\n if (trailingRegion.collapsedLines > 0) {\n const separatorHeight =\n getTrailingHunkSeparatorLayout({\n type: hunkSeparators,\n metrics,\n })?.totalHeight ?? 0;\n splitHeight += separatorHeight;\n unifiedHeight += separatorHeight;\n }\n } else if (\n hunkIndex === finalHunkIndex &&\n fileDiff.isPartial &&\n canHydratePartialDiff\n ) {\n const separatorHeight =\n getTrailingHunkSeparatorLayout({\n type: hunkSeparators,\n metrics,\n })?.totalHeight ?? 0;\n splitHeight += separatorHeight;\n unifiedHeight += separatorHeight;\n }\n }\n\n if (fileDiff.hunks.length > 0) {\n const paddingBottom = getVirtualFilePaddingBottom(metrics);\n splitHeight += paddingBottom;\n unifiedHeight += paddingBottom;\n }\n\n return { splitHeight, unifiedHeight };\n}\n\nfunction getNoNewlineMetadataLineCounts(hunk: Hunk): {\n split: number;\n unified: number;\n} {\n if (!hunk.noEOFCRAdditions && !hunk.noEOFCRDeletions) {\n return { split: 0, unified: 0 };\n }\n\n const lastContent = hunk.hunkContent.at(-1);\n if (lastContent == null) {\n return { split: 0, unified: 0 };\n }\n\n if (lastContent.type === 'context') {\n const metadataRows = lastContent.lines > 0 ? 1 : 0;\n return { split: metadataRows, unified: metadataRows };\n }\n\n return getChangeNoNewlineMetadataLineCounts(hunk, lastContent);\n}\nfunction getChangeNoNewlineMetadataLineCounts(\n hunk: Hunk,\n content: ChangeContent\n): { split: number; unified: number } {\n const unified =\n (content.deletions > 0 && hunk.noEOFCRDeletions ? 1 : 0) +\n (content.additions > 0 && hunk.noEOFCRAdditions ? 1 : 0);\n const splitDeletionHasMetadata =\n content.deletions > 0 && hunk.noEOFCRDeletions;\n const splitAdditionHasMetadata =\n content.additions > 0 && hunk.noEOFCRAdditions;\n const split = splitDeletionHasMetadata || splitAdditionHasMetadata ? 1 : 0;\n\n return { split, unified };\n}\n"],"mappings":";;;AAqCA,SAAgB,4BAA4B,EAC1C,UACA,SACA,mBACA,gBACA,iBACA,eAAe,yBACf,2BACA,yBAC2D;CAC3D,IAAI,cAAc,2BAA2B,SAAS,iBAAiB;CACvE,IAAI,gBAAgB;CACpB,MAAM,gBAAgB,kBAAkB,OAAO;CAC/C,MAAM,iBAAiB,SAAS,MAAM,SAAS;CAE/C,KAAK,IAAI,YAAY,GAAG,YAAY,SAAS,MAAM,QAAQ,aAAa;EACtE,MAAM,OAAO,SAAS,MAAM;EAC5B,IAAI,QAAQ,MACV,MAAM,IAAI,MAAM,iDAAiD;EAGnE,MAAM,gBAAgB,kBAAkB;GACtC,WAAW,SAAS;GACpB,WAAW,KAAK;GAChB;GACA;GACA;EACF,CAAC;EACD,MAAM,yBACH,cAAc,YAAY,cAAc,WAAW,QAAQ;EAC9D,eAAe;EACf,iBAAiB;EAEjB,IAAI,cAAc,iBAAiB,GAAG;GACpC,MAAM,kBACJ,8BAA8B;IAC5B,MAAM;IACN;IACA;IACA,WAAW,KAAK;GAClB,CAAC,CAAC,EAAE,eAAe;GACrB,eAAe;GACf,iBAAiB;EACnB;EAEA,eAAe,KAAK,iBAAiB,QAAQ;EAC7C,iBAAiB,KAAK,mBAAmB,QAAQ;EAEjD,MAAM,qBAAqB,+BAA+B,IAAI;EAC9D,eAAe,mBAAmB,QAAQ,QAAQ;EAClD,iBAAiB,mBAAmB,UAAU,QAAQ;EAEtD,MAAM,iBACJ,cAAc,iBACV,0BAA0B;GACxB;GACA;GACA;GACA;GACA,aAAa;EACf,CAAC,IACD,KAAA;EACN,IAAI,kBAAkB,MAAM;GAC1B,MAAM,0BACH,eAAe,YAAY,eAAe,WAC3C,QAAQ;GACV,eAAe;GACf,iBAAiB;GAEjB,IAAI,eAAe,iBAAiB,GAAG;IACrC,MAAM,kBACJ,+BAA+B;KAC7B,MAAM;KACN;IACF,CAAC,CAAC,EAAE,eAAe;IACrB,eAAe;IACf,iBAAiB;GACnB;EACF,OAAO,IACL,cAAc,kBACd,SAAS,aACT,uBACA;GACA,MAAM,kBACJ,+BAA+B;IAC7B,MAAM;IACN;GACF,CAAC,CAAC,EAAE,eAAe;GACrB,eAAe;GACf,iBAAiB;EACnB;CACF;CAEA,IAAI,SAAS,MAAM,SAAS,GAAG;EAC7B,MAAM,gBAAgB,4BAA4B,OAAO;EACzD,eAAe;EACf,iBAAiB;CACnB;CAEA,OAAO;EAAE;EAAa;CAAc;AACtC;AAEA,SAAS,+BAA+B,MAGtC;CACA,IAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,kBAClC,OAAO;EAAE,OAAO;EAAG,SAAS;CAAE;CAGhC,MAAM,cAAc,KAAK,YAAY,GAAG,EAAE;CAC1C,IAAI,eAAe,MACjB,OAAO;EAAE,OAAO;EAAG,SAAS;CAAE;CAGhC,IAAI,YAAY,SAAS,WAAW;EAClC,MAAM,eAAe,YAAY,QAAQ,IAAI,IAAI;EACjD,OAAO;GAAE,OAAO;GAAc,SAAS;EAAa;CACtD;CAEA,OAAO,qCAAqC,MAAM,WAAW;AAC/D;AACA,SAAS,qCACP,MACA,SACoC;CACpC,MAAM,WACH,QAAQ,YAAY,KAAK,KAAK,mBAAmB,IAAI,MACrD,QAAQ,YAAY,KAAK,KAAK,mBAAmB,IAAI;CACxD,MAAM,2BACJ,QAAQ,YAAY,KAAK,KAAK;CAChC,MAAM,2BACJ,QAAQ,YAAY,KAAK,KAAK;CAGhC,OAAO;EAAE,OAFK,4BAA4B,2BAA2B,IAAI;EAEzD;CAAQ;AAC1B"}
@@ -0,0 +1,5 @@
1
+ //#region src/utils/createCodeViewHeaderFooterHostElement.d.ts
2
+ declare function createCodeViewHeaderFooterHostElement(type: 'header' | 'footer', container: HTMLDivElement, resizeObserver?: ResizeObserver): HTMLDivElement;
3
+ //#endregion
4
+ export { createCodeViewHeaderFooterHostElement };
5
+ //# sourceMappingURL=createCodeViewHeaderFooterHostElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCodeViewHeaderFooterHostElement.d.ts","names":[],"sources":["../../src/utils/createCodeViewHeaderFooterHostElement.ts"],"mappings":";iBAQgB,qCAAA,CACd,IAAA,uBACA,SAAA,EAAW,cAAA,EACX,cAAA,GAAiB,cAAA,GAChB,cAAA"}
@@ -0,0 +1,19 @@
1
+ import { CODE_VIEW_FOOTER_ATTRIBUTE, CODE_VIEW_HEADER_ATTRIBUTE } from "../constants.js";
2
+ //#region src/utils/createCodeViewHeaderFooterHostElement.ts
3
+ function createCodeViewHeaderFooterHostElement(type, container, resizeObserver) {
4
+ const element = document.createElement("div");
5
+ element.style.display = "flow-root";
6
+ if (type === "header") {
7
+ element.setAttribute(CODE_VIEW_HEADER_ATTRIBUTE, "");
8
+ container.before(element);
9
+ } else {
10
+ element.setAttribute(CODE_VIEW_FOOTER_ATTRIBUTE, "");
11
+ container.after(element);
12
+ }
13
+ resizeObserver?.observe(element);
14
+ return element;
15
+ }
16
+ //#endregion
17
+ export { createCodeViewHeaderFooterHostElement };
18
+
19
+ //# sourceMappingURL=createCodeViewHeaderFooterHostElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCodeViewHeaderFooterHostElement.js","names":[],"sources":["../../src/utils/createCodeViewHeaderFooterHostElement.ts"],"sourcesContent":["import {\n CODE_VIEW_FOOTER_ATTRIBUTE,\n CODE_VIEW_HEADER_ATTRIBUTE,\n} from '../constants';\n\n// Create, style, position, and observe a header/footer host element. `flow-root`\n// gives it a block formatting context so the caller's content margins stay\n// inside it, keeping measurement / ResizeObserver heights accurate.\nexport function createCodeViewHeaderFooterHostElement(\n type: 'header' | 'footer',\n container: HTMLDivElement,\n resizeObserver?: ResizeObserver\n): HTMLDivElement {\n const element = document.createElement('div');\n element.style.display = 'flow-root';\n if (type === 'header') {\n element.setAttribute(CODE_VIEW_HEADER_ATTRIBUTE, '');\n container.before(element);\n } else {\n element.setAttribute(CODE_VIEW_FOOTER_ATTRIBUTE, '');\n container.after(element);\n }\n resizeObserver?.observe(element);\n return element;\n}\n"],"mappings":";;AAQA,SAAgB,sCACd,MACA,WACA,gBACgB;CAChB,MAAM,UAAU,SAAS,cAAc,KAAK;CAC5C,QAAQ,MAAM,UAAU;CACxB,IAAI,SAAS,UAAU;EACrB,QAAQ,aAAa,4BAA4B,EAAE;EACnD,UAAU,OAAO,OAAO;CAC1B,OAAO;EACL,QAAQ,aAAa,4BAA4B,EAAE;EACnD,UAAU,MAAM,OAAO;CACzB;CACA,gBAAgB,QAAQ,OAAO;CAC/B,OAAO;AACT"}
@@ -16,7 +16,6 @@ function createPreWrapperProperties({ diffIndicators, disableBackground, disable
16
16
  "data-disable-line-numbers": disableLineNumbers ? "" : void 0,
17
17
  "data-background": !disableBackground ? "" : void 0,
18
18
  "data-indicators": diffIndicators === "bars" || diffIndicators === "classic" ? diffIndicators : void 0,
19
- tabIndex: 0,
20
19
  style: `--diffs-min-number-column-width-default:${`${totalLines}`.length}ch;`
21
20
  };
22
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createPreElement.js","names":[],"sources":["../../src/utils/createPreElement.ts"],"sourcesContent":["import type { Element as HASTElement, Properties } from 'hast';\n\nimport type { PrePropertiesConfig } from '../types';\nimport { createHastElement } from './hast_utils';\n\nexport function createPreElement(options: PrePropertiesConfig): HASTElement {\n return createHastElement({\n tagName: 'pre',\n properties: createPreWrapperProperties(options),\n });\n}\n\nexport function createPreWrapperProperties({\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split,\n totalLines,\n type,\n customProperties,\n}: PrePropertiesConfig): Properties {\n const properties: Properties = {\n // NOTE: We always apply custom properties first so the important\n // properties cannot be overridden\n ...customProperties,\n 'data-diff': type === 'diff' ? '' : undefined,\n 'data-file': type === 'file' ? '' : undefined,\n 'data-diff-type':\n type === 'diff' ? (split ? 'split' : 'single') : undefined,\n 'data-overflow': overflow,\n 'data-disable-line-numbers': disableLineNumbers ? '' : undefined,\n 'data-background': !disableBackground ? '' : undefined,\n 'data-indicators':\n diffIndicators === 'bars' || diffIndicators === 'classic'\n ? diffIndicators\n : undefined,\n tabIndex: 0,\n style: `--diffs-min-number-column-width-default:${`${totalLines}`.length}ch;`,\n };\n\n return properties;\n}\n"],"mappings":";;AAKA,SAAgB,iBAAiB,SAA2C;CAC1E,OAAO,kBAAkB;EACvB,SAAS;EACT,YAAY,2BAA2B,OAAO;CAChD,CAAC;AACH;AAEA,SAAgB,2BAA2B,EACzC,gBACA,mBACA,oBACA,UACA,OACA,YACA,MACA,oBACkC;CAoBlC,OAAO;EAhBL,GAAG;EACH,aAAa,SAAS,SAAS,KAAK,KAAA;EACpC,aAAa,SAAS,SAAS,KAAK,KAAA;EACpC,kBACE,SAAS,SAAU,QAAQ,UAAU,WAAY,KAAA;EACnD,iBAAiB;EACjB,6BAA6B,qBAAqB,KAAK,KAAA;EACvD,mBAAmB,CAAC,oBAAoB,KAAK,KAAA;EAC7C,mBACE,mBAAmB,UAAU,mBAAmB,YAC5C,iBACA,KAAA;EACN,UAAU;EACV,OAAO,2CAA2C,GAAG,aAAa,OAAO;CAG3D;AAClB"}
1
+ {"version":3,"file":"createPreElement.js","names":[],"sources":["../../src/utils/createPreElement.ts"],"sourcesContent":["import type { Element as HASTElement, Properties } from 'hast';\n\nimport type { PrePropertiesConfig } from '../types';\nimport { createHastElement } from './hast_utils';\n\nexport function createPreElement(options: PrePropertiesConfig): HASTElement {\n return createHastElement({\n tagName: 'pre',\n properties: createPreWrapperProperties(options),\n });\n}\n\nexport function createPreWrapperProperties({\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split,\n totalLines,\n type,\n customProperties,\n}: PrePropertiesConfig): Properties {\n const properties: Properties = {\n // NOTE: We always apply custom properties first so the important\n // properties cannot be overridden\n ...customProperties,\n 'data-diff': type === 'diff' ? '' : undefined,\n 'data-file': type === 'file' ? '' : undefined,\n 'data-diff-type':\n type === 'diff' ? (split ? 'split' : 'single') : undefined,\n 'data-overflow': overflow,\n 'data-disable-line-numbers': disableLineNumbers ? '' : undefined,\n 'data-background': !disableBackground ? '' : undefined,\n 'data-indicators':\n diffIndicators === 'bars' || diffIndicators === 'classic'\n ? diffIndicators\n : undefined,\n // The pre is intentionally not focusable. It is not the scroll container\n // (`[data-code]` inside it is) and has no keyboard behavior of its own, so\n // a tabindex would only add a tab stop per diff and steal focus from a host\n // wrapper that wants to own keyboard navigation of the selection.\n style: `--diffs-min-number-column-width-default:${`${totalLines}`.length}ch;`,\n };\n\n return properties;\n}\n"],"mappings":";;AAKA,SAAgB,iBAAiB,SAA2C;CAC1E,OAAO,kBAAkB;EACvB,SAAS;EACT,YAAY,2BAA2B,OAAO;CAChD,CAAC;AACH;AAEA,SAAgB,2BAA2B,EACzC,gBACA,mBACA,oBACA,UACA,OACA,YACA,MACA,oBACkC;CAuBlC,OAAO;EAnBL,GAAG;EACH,aAAa,SAAS,SAAS,KAAK,KAAA;EACpC,aAAa,SAAS,SAAS,KAAK,KAAA;EACpC,kBACE,SAAS,SAAU,QAAQ,UAAU,WAAY,KAAA;EACnD,iBAAiB;EACjB,6BAA6B,qBAAqB,KAAK,KAAA;EACvD,mBAAmB,CAAC,oBAAoB,KAAK,KAAA;EAC7C,mBACE,mBAAmB,UAAU,mBAAmB,YAC5C,iBACA,KAAA;EAKN,OAAO,2CAA2C,GAAG,aAAa,OAAO;CAG3D;AAClB"}
@@ -0,0 +1,14 @@
1
+ import { DiffFileInput, FileContents } from "../types.js";
2
+
3
+ //#region src/utils/getDiffFileInput.d.ts
4
+ interface GetDiffFileInputProps {
5
+ oldFile?: FileContents | null;
6
+ newFile?: FileContents | null;
7
+ }
8
+ declare function getDiffFileInput({
9
+ oldFile,
10
+ newFile
11
+ }: GetDiffFileInputProps, context: string): DiffFileInput | undefined;
12
+ //#endregion
13
+ export { getDiffFileInput };
14
+ //# sourceMappingURL=getDiffFileInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDiffFileInput.d.ts","names":[],"sources":["../../src/utils/getDiffFileInput.ts"],"mappings":";;;UAEU,qBAAA;EACR,OAAA,GAAU,YAAA;EACV,OAAA,GAAU,YAAY;AAAA;AAAA,iBAGR,gBAAA;EACZ,OAAA;EAAS;AAAA,GAAW,qBAAA,EACtB,OAAA,WACC,aAAA"}
@@ -0,0 +1,24 @@
1
+ //#region src/utils/getDiffFileInput.ts
2
+ function getDiffFileInput({ oldFile, newFile }, context) {
3
+ if (oldFile === void 0 && newFile === void 0) return;
4
+ if (oldFile === void 0 || newFile === void 0) throw new Error(`${context}: Pass null for an intentionally missing oldFile or newFile side`);
5
+ if (oldFile === null) {
6
+ if (newFile === null) throw new Error(`${context}: You must pass oldFile, newFile, or both`);
7
+ return {
8
+ oldFile,
9
+ newFile
10
+ };
11
+ }
12
+ if (newFile === null) return {
13
+ oldFile,
14
+ newFile
15
+ };
16
+ return {
17
+ oldFile,
18
+ newFile
19
+ };
20
+ }
21
+ //#endregion
22
+ export { getDiffFileInput };
23
+
24
+ //# sourceMappingURL=getDiffFileInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDiffFileInput.js","names":[],"sources":["../../src/utils/getDiffFileInput.ts"],"sourcesContent":["import type { DiffFileInput, FileContents } from '../types';\n\ninterface GetDiffFileInputProps {\n oldFile?: FileContents | null;\n newFile?: FileContents | null;\n}\n\nexport function getDiffFileInput(\n { oldFile, newFile }: GetDiffFileInputProps,\n context: string\n): DiffFileInput | undefined {\n if (oldFile === undefined && newFile === undefined) {\n return undefined;\n }\n if (oldFile === undefined || newFile === undefined) {\n throw new Error(\n `${context}: Pass null for an intentionally missing oldFile or newFile side`\n );\n }\n if (oldFile === null) {\n if (newFile === null) {\n throw new Error(`${context}: You must pass oldFile, newFile, or both`);\n }\n return { oldFile, newFile };\n }\n if (newFile === null) {\n return { oldFile, newFile };\n }\n return { oldFile, newFile };\n}\n"],"mappings":";AAOA,SAAgB,iBACd,EAAE,SAAS,WACX,SAC2B;CAC3B,IAAI,YAAY,KAAA,KAAa,YAAY,KAAA,GACvC;CAEF,IAAI,YAAY,KAAA,KAAa,YAAY,KAAA,GACvC,MAAM,IAAI,MACR,GAAG,QAAQ,iEACb;CAEF,IAAI,YAAY,MAAM;EACpB,IAAI,YAAY,MACd,MAAM,IAAI,MAAM,GAAG,QAAQ,0CAA0C;EAEvE,OAAO;GAAE;GAAS;EAAQ;CAC5B;CACA,IAAI,YAAY,MACd,OAAO;EAAE;EAAS;CAAQ;CAE5B,OAAO;EAAE;EAAS;CAAQ;AAC5B"}
@@ -18,6 +18,7 @@ function getDiffHunksRendererOptions(options) {
18
18
  disableBackground: options?.disableBackground,
19
19
  hunkSeparators: typeof options?.hunkSeparators === "function" ? "custom" : options?.hunkSeparators,
20
20
  expandUnchanged: options?.expandUnchanged,
21
+ loadDiffFiles: options?.loadDiffFiles,
21
22
  collapsedContextThreshold: options?.collapsedContextThreshold,
22
23
  lineDiffType: options?.lineDiffType,
23
24
  maxLineDiffLength: options?.maxLineDiffLength,
@@ -1 +1 @@
1
- {"version":3,"file":"getDiffHunksRendererOptions.js","names":[],"sources":["../../src/utils/getDiffHunksRendererOptions.ts"],"sourcesContent":["import type { FileDiffOptions } from '../components/FileDiff';\nimport type { DiffHunksRendererOptions } from '../renderers/DiffHunksRenderer';\n\n// Build the renderer option snapshot with direct property reads. CodeView item\n// options may inherit prototype getters, so object spread can miss values.\nexport function getDiffHunksRendererOptions<LAnnotation>(\n options: FileDiffOptions<LAnnotation> | undefined\n): DiffHunksRendererOptions {\n return {\n theme: options?.theme,\n disableLineNumbers: options?.disableLineNumbers,\n overflow: options?.overflow,\n collapsed: options?.collapsed,\n disableFileHeader: options?.disableFileHeader,\n disableVirtualizationBuffers: options?.disableVirtualizationBuffers,\n stickyHeader: options?.stickyHeader,\n preferredHighlighter: options?.preferredHighlighter,\n useCSSClasses: options?.useCSSClasses,\n useTokenTransformer: options?.useTokenTransformer,\n tokenizeMaxLineLength: options?.tokenizeMaxLineLength,\n tokenizeMaxLength: options?.tokenizeMaxLength,\n diffStyle: options?.diffStyle,\n diffIndicators: options?.diffIndicators,\n disableBackground: options?.disableBackground,\n hunkSeparators:\n typeof options?.hunkSeparators === 'function'\n ? 'custom'\n : options?.hunkSeparators,\n expandUnchanged: options?.expandUnchanged,\n collapsedContextThreshold: options?.collapsedContextThreshold,\n lineDiffType: options?.lineDiffType,\n maxLineDiffLength: options?.maxLineDiffLength,\n expansionLineCount: options?.expansionLineCount,\n headerRenderMode:\n options?.renderCustomHeader != null ? 'custom' : 'default',\n };\n}\n"],"mappings":";AAKA,SAAgB,4BACd,SAC0B;CAC1B,OAAO;EACL,OAAO,SAAS;EAChB,oBAAoB,SAAS;EAC7B,UAAU,SAAS;EACnB,WAAW,SAAS;EACpB,mBAAmB,SAAS;EAC5B,8BAA8B,SAAS;EACvC,cAAc,SAAS;EACvB,sBAAsB,SAAS;EAC/B,eAAe,SAAS;EACxB,qBAAqB,SAAS;EAC9B,uBAAuB,SAAS;EAChC,mBAAmB,SAAS;EAC5B,WAAW,SAAS;EACpB,gBAAgB,SAAS;EACzB,mBAAmB,SAAS;EAC5B,gBACE,OAAO,SAAS,mBAAmB,aAC/B,WACA,SAAS;EACf,iBAAiB,SAAS;EAC1B,2BAA2B,SAAS;EACpC,cAAc,SAAS;EACvB,mBAAmB,SAAS;EAC5B,oBAAoB,SAAS;EAC7B,kBACE,SAAS,sBAAsB,OAAO,WAAW;CACrD;AACF"}
1
+ {"version":3,"file":"getDiffHunksRendererOptions.js","names":[],"sources":["../../src/utils/getDiffHunksRendererOptions.ts"],"sourcesContent":["import type { FileDiffOptions } from '../components/FileDiff';\nimport type { DiffHunksRendererOptions } from '../renderers/DiffHunksRenderer';\n\n// Build the renderer option snapshot with direct property reads. CodeView item\n// options may inherit prototype getters, so object spread can miss values.\nexport function getDiffHunksRendererOptions<LAnnotation>(\n options: FileDiffOptions<LAnnotation> | undefined\n): DiffHunksRendererOptions {\n return {\n theme: options?.theme,\n disableLineNumbers: options?.disableLineNumbers,\n overflow: options?.overflow,\n collapsed: options?.collapsed,\n disableFileHeader: options?.disableFileHeader,\n disableVirtualizationBuffers: options?.disableVirtualizationBuffers,\n stickyHeader: options?.stickyHeader,\n preferredHighlighter: options?.preferredHighlighter,\n useCSSClasses: options?.useCSSClasses,\n useTokenTransformer: options?.useTokenTransformer,\n tokenizeMaxLineLength: options?.tokenizeMaxLineLength,\n tokenizeMaxLength: options?.tokenizeMaxLength,\n diffStyle: options?.diffStyle,\n diffIndicators: options?.diffIndicators,\n disableBackground: options?.disableBackground,\n hunkSeparators:\n typeof options?.hunkSeparators === 'function'\n ? 'custom'\n : options?.hunkSeparators,\n expandUnchanged: options?.expandUnchanged,\n loadDiffFiles: options?.loadDiffFiles,\n collapsedContextThreshold: options?.collapsedContextThreshold,\n lineDiffType: options?.lineDiffType,\n maxLineDiffLength: options?.maxLineDiffLength,\n expansionLineCount: options?.expansionLineCount,\n headerRenderMode:\n options?.renderCustomHeader != null ? 'custom' : 'default',\n };\n}\n"],"mappings":";AAKA,SAAgB,4BACd,SAC0B;CAC1B,OAAO;EACL,OAAO,SAAS;EAChB,oBAAoB,SAAS;EAC7B,UAAU,SAAS;EACnB,WAAW,SAAS;EACpB,mBAAmB,SAAS;EAC5B,8BAA8B,SAAS;EACvC,cAAc,SAAS;EACvB,sBAAsB,SAAS;EAC/B,eAAe,SAAS;EACxB,qBAAqB,SAAS;EAC9B,uBAAuB,SAAS;EAChC,mBAAmB,SAAS;EAC5B,WAAW,SAAS;EACpB,gBAAgB,SAAS;EACzB,mBAAmB,SAAS;EAC5B,gBACE,OAAO,SAAS,mBAAmB,aAC/B,WACA,SAAS;EACf,iBAAiB,SAAS;EAC1B,eAAe,SAAS;EACxB,2BAA2B,SAAS;EACpC,cAAc,SAAS;EACvB,mBAAmB,SAAS;EAC5B,oBAAoB,SAAS;EAC7B,kBACE,SAAS,sBAAsB,OAAO,WAAW;CACrD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"getFiletypeFromFileName.d.ts","names":[],"sources":["../../src/utils/getFiletypeFromFileName.ts"],"mappings":";;;cAOa,wBAAA,EAA0B,kBAwVtC;AAAA,iBAEe,uBAAA,CAAwB,QAAA,WAAmB,kBAAkB;AAAA,iBA4B7D,uBAAA,CACd,OAAA,UACA,GAAA,EAAK,kBAAkB;AAAA,iBAgBT,0BAAA;AAAA,iBAIA,kBAAA,CACd,GAAA,UACA,IAAA,EAAM,kBAAkB;AAAA,iBAgBV,sBAAA,IAA0B,kBAAkB"}
1
+ {"version":3,"file":"getFiletypeFromFileName.d.ts","names":[],"sources":["../../src/utils/getFiletypeFromFileName.ts"],"mappings":";;;cAOa,wBAAA,EAA0B,kBA0VtC;AAAA,iBAEe,uBAAA,CAAwB,QAAA,WAAmB,kBAAkB;AAAA,iBA4B7D,uBAAA,CACd,OAAA,UACA,GAAA,EAAK,kBAAkB;AAAA,iBAgBT,0BAAA;AAAA,iBAIA,kBAAA,CACd,GAAA,UACA,IAAA,EAAM,kBAAkB;AAAA,iBAgBV,sBAAA,IAA0B,kBAAkB"}
@@ -310,6 +310,8 @@ const EXTENSION_TO_FILE_FORMAT = {
310
310
  tfvars: "tfvars",
311
311
  toml: "toml",
312
312
  ts: "typescript",
313
+ mts: "typescript",
314
+ cts: "typescript",
313
315
  tsp: "typespec",
314
316
  tsv: "tsv",
315
317
  tsx: "tsx",
@@ -1 +1 @@
1
- {"version":3,"file":"getFiletypeFromFileName.js","names":[],"sources":["../../src/utils/getFiletypeFromFileName.ts"],"sourcesContent":["import type { ExtensionFormatMap, SupportedLanguages } from '../types';\n\nconst CUSTOM_EXTENSION_TO_FILE_FORMAT: Map<string, SupportedLanguages> =\n new Map();\n\nlet customExtensionsVersion = 0;\n\nexport const EXTENSION_TO_FILE_FORMAT: ExtensionFormatMap = {\n '1c': '1c',\n abap: 'abap',\n as: 'actionscript-3',\n ada: 'ada',\n adb: 'ada',\n ads: 'ada',\n adoc: 'asciidoc',\n asciidoc: 'asciidoc',\n 'component.html': 'angular-html',\n 'component.ts': 'angular-ts',\n conf: 'nginx',\n htaccess: 'apache',\n cls: 'tex',\n trigger: 'apex',\n apl: 'apl',\n applescript: 'applescript',\n scpt: 'applescript',\n ara: 'ara',\n asm: 'asm',\n s: 'riscv',\n astro: 'astro',\n awk: 'awk',\n bal: 'ballerina',\n sh: 'zsh',\n bash: 'zsh',\n bat: 'cmd',\n cmd: 'cmd',\n be: 'berry',\n beancount: 'beancount',\n bib: 'bibtex',\n bicep: 'bicep',\n 'blade.php': 'blade',\n bsl: 'bsl',\n c: 'c',\n h: 'objective-cpp',\n cs: 'csharp',\n cpp: 'cpp',\n hpp: 'cpp',\n cc: 'cpp',\n cxx: 'cpp',\n hh: 'cpp',\n cdc: 'cdc',\n cairo: 'cairo',\n clar: 'clarity',\n clj: 'clojure',\n cljs: 'clojure',\n cljc: 'clojure',\n soy: 'soy',\n cmake: 'cmake',\n 'CMakeLists.txt': 'cmake',\n cob: 'cobol',\n cbl: 'cobol',\n cobol: 'cobol',\n CODEOWNERS: 'codeowners',\n ql: 'ql',\n coffee: 'coffeescript',\n lisp: 'lisp',\n cl: 'lisp',\n lsp: 'lisp',\n log: 'log',\n v: 'verilog',\n cql: 'cql',\n cr: 'crystal',\n css: 'css',\n csv: 'csv',\n cue: 'cue',\n cypher: 'cypher',\n cyp: 'cypher',\n d: 'd',\n dart: 'dart',\n dax: 'dax',\n desktop: 'desktop',\n diff: 'diff',\n patch: 'diff',\n Dockerfile: 'dockerfile',\n dockerfile: 'dockerfile',\n env: 'dotenv',\n dm: 'dream-maker',\n edge: 'edge',\n el: 'emacs-lisp',\n ex: 'elixir',\n exs: 'elixir',\n elm: 'elm',\n erb: 'erb',\n erl: 'erlang',\n hrl: 'erlang',\n f: 'fortran-fixed-form',\n for: 'fortran-fixed-form',\n fs: 'fsharp',\n fsi: 'fsharp',\n fsx: 'fsharp',\n f03: 'f03',\n f08: 'f08',\n f18: 'f18',\n f77: 'f77',\n f90: 'fortran-free-form',\n f95: 'fortran-free-form',\n fnl: 'fennel',\n fish: 'fish',\n ftl: 'ftl',\n tres: 'gdresource',\n res: 'gdresource',\n gd: 'gdscript',\n gdshader: 'gdshader',\n gs: 'genie',\n feature: 'gherkin',\n COMMIT_EDITMSG: 'git-commit',\n 'git-rebase-todo': 'git-rebase',\n gjs: 'glimmer-js',\n gleam: 'gleam',\n gts: 'glimmer-ts',\n glsl: 'glsl',\n vert: 'glsl',\n frag: 'glsl',\n shader: 'shaderlab',\n gp: 'gnuplot',\n plt: 'gnuplot',\n gnuplot: 'gnuplot',\n go: 'go',\n graphql: 'graphql',\n gql: 'graphql',\n groovy: 'groovy',\n gvy: 'groovy',\n hack: 'hack',\n haml: 'haml',\n hbs: 'handlebars',\n handlebars: 'handlebars',\n hs: 'haskell',\n lhs: 'haskell',\n hx: 'haxe',\n hcl: 'hcl',\n hjson: 'hjson',\n hlsl: 'hlsl',\n fx: 'hlsl',\n html: 'html',\n htm: 'html',\n http: 'http',\n rest: 'http',\n hxml: 'hxml',\n hy: 'hy',\n imba: 'imba',\n ini: 'ini',\n cfg: 'ini',\n jade: 'pug',\n pug: 'pug',\n java: 'java',\n js: 'javascript',\n mjs: 'javascript',\n cjs: 'javascript',\n jinja: 'jinja',\n jinja2: 'jinja',\n j2: 'jinja',\n jison: 'jison',\n jl: 'julia',\n json: 'json',\n json5: 'json5',\n jsonc: 'jsonc',\n jsonl: 'jsonl',\n jsonnet: 'jsonnet',\n libsonnet: 'jsonnet',\n jssm: 'jssm',\n jsx: 'jsx',\n kt: 'kotlin',\n kts: 'kts',\n kql: 'kusto',\n tex: 'tex',\n ltx: 'tex',\n lean: 'lean4',\n less: 'less',\n liquid: 'liquid',\n lit: 'lit',\n ll: 'llvm',\n logo: 'logo',\n lua: 'lua',\n luau: 'luau',\n Makefile: 'makefile',\n mk: 'makefile',\n makefile: 'makefile',\n md: 'markdown',\n markdown: 'markdown',\n marko: 'marko',\n m: 'wolfram',\n mat: 'matlab',\n mdc: 'mdc',\n mdx: 'mdx',\n wiki: 'wikitext',\n mediawiki: 'wikitext',\n mmd: 'mermaid',\n mermaid: 'mermaid',\n mips: 'mipsasm',\n mojo: 'mojo',\n '🔥': 'mojo',\n move: 'move',\n nar: 'narrat',\n nf: 'nextflow',\n nim: 'nim',\n nims: 'nim',\n nimble: 'nim',\n nix: 'nix',\n nu: 'nushell',\n mm: 'objective-cpp',\n ml: 'ocaml',\n mli: 'ocaml',\n mll: 'ocaml',\n mly: 'ocaml',\n pas: 'pascal',\n p: 'pascal',\n pl: 'prolog',\n pm: 'perl',\n t: 'perl',\n raku: 'raku',\n p6: 'raku',\n pl6: 'raku',\n php: 'php',\n phtml: 'php',\n pls: 'plsql',\n sql: 'sql',\n po: 'po',\n polar: 'polar',\n pcss: 'postcss',\n pot: 'pot',\n potx: 'potx',\n pq: 'powerquery',\n pqm: 'powerquery',\n ps1: 'powershell',\n psm1: 'powershell',\n psd1: 'powershell',\n prisma: 'prisma',\n pro: 'prolog',\n P: 'prolog',\n properties: 'properties',\n proto: 'protobuf',\n pp: 'puppet',\n purs: 'purescript',\n py: 'python',\n pyw: 'python',\n pyi: 'python',\n qml: 'qml',\n qmldir: 'qmldir',\n qss: 'qss',\n r: 'r',\n R: 'r',\n rkt: 'racket',\n rktl: 'racket',\n razor: 'razor',\n cshtml: 'razor',\n rb: 'ruby',\n rbw: 'ruby',\n reg: 'reg',\n regex: 'regexp',\n rel: 'rel',\n rs: 'rust',\n rst: 'rst',\n rake: 'ruby',\n gemspec: 'ruby',\n jbuilder: 'ruby',\n builder: 'ruby',\n rabl: 'ruby',\n arb: 'ruby',\n ru: 'ruby',\n podspec: 'ruby',\n Gemfile: 'ruby',\n Rakefile: 'ruby',\n Guardfile: 'ruby',\n Capfile: 'ruby',\n Berksfile: 'ruby',\n Brewfile: 'ruby',\n Vagrantfile: 'ruby',\n Thorfile: 'ruby',\n Appraisals: 'ruby',\n Dangerfile: 'ruby',\n sas: 'sas',\n sass: 'sass',\n scala: 'scala',\n sc: 'scala',\n scm: 'scheme',\n ss: 'scheme',\n sld: 'scheme',\n scss: 'scss',\n sdbl: 'sdbl',\n shadergraph: 'shader',\n st: 'smalltalk',\n sol: 'solidity',\n sparql: 'sparql',\n rq: 'sparql',\n spl: 'splunk',\n config: 'ssh-config',\n do: 'stata',\n ado: 'stata',\n dta: 'stata',\n styl: 'stylus',\n stylus: 'stylus',\n svelte: 'svelte',\n swift: 'swift',\n sv: 'system-verilog',\n svh: 'system-verilog',\n service: 'systemd',\n socket: 'systemd',\n device: 'systemd',\n timer: 'systemd',\n talon: 'talonscript',\n tasl: 'tasl',\n tcl: 'tcl',\n templ: 'templ',\n tf: 'tf',\n tfvars: 'tfvars',\n toml: 'toml',\n ts: 'typescript',\n tsp: 'typespec',\n tsv: 'tsv',\n tsx: 'tsx',\n ttl: 'turtle',\n twig: 'twig',\n typ: 'typst',\n vv: 'v',\n vala: 'vala',\n vapi: 'vala',\n vb: 'vb',\n vbs: 'vb',\n bas: 'vb',\n vh: 'verilog',\n vhd: 'vhdl',\n vhdl: 'vhdl',\n vim: 'vimscript',\n vue: 'vue',\n 'vine.ts': 'vue-vine',\n vy: 'vyper',\n wasm: 'wasm',\n wat: 'wasm',\n wy: '文言',\n wgsl: 'wgsl',\n wit: 'wit',\n wl: 'wolfram',\n nb: 'wolfram',\n xml: 'xml',\n xsl: 'xsl',\n xslt: 'xsl',\n yaml: 'yaml',\n yml: 'yml',\n zs: 'zenscript',\n zig: 'zig',\n zsh: 'zsh',\n sty: 'tex',\n};\n\nexport function getFiletypeFromFileName(fileName: string): SupportedLanguages {\n if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(fileName)) {\n return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(fileName) ?? 'text';\n }\n // Handle special files without extensions first\n if (EXTENSION_TO_FILE_FORMAT[fileName] != null) {\n return EXTENSION_TO_FILE_FORMAT[fileName];\n }\n\n // Try compound extensions first (e.g., .blade.php, .component.ts)\n const compoundMatch = fileName.match(/\\.([^/\\\\]+\\.[^/\\\\]+)$/);\n if (compoundMatch != null) {\n if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(compoundMatch[1])) {\n return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(compoundMatch[1]) ?? 'text';\n }\n if (EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] != null) {\n return EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] ?? 'text';\n }\n }\n\n // Fall back to simple extension\n const simpleMatch = fileName.match(/\\.([^.]+)$/)?.[1] ?? '';\n if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(simpleMatch)) {\n return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(simpleMatch) ?? 'text';\n }\n return EXTENSION_TO_FILE_FORMAT[simpleMatch] ?? 'text';\n}\n\nexport function replaceCustomExtensions(\n version: number,\n map: ExtensionFormatMap\n): boolean {\n if (version <= customExtensionsVersion) {\n return false;\n }\n CUSTOM_EXTENSION_TO_FILE_FORMAT.clear();\n for (const key in map) {\n const lang = map[key];\n if (lang != null) {\n CUSTOM_EXTENSION_TO_FILE_FORMAT.set(key, lang);\n }\n }\n customExtensionsVersion = version;\n return true;\n}\n\nexport function getCustomExtensionsVersion(): number {\n return customExtensionsVersion;\n}\n\nexport function setCustomExtension(\n key: string,\n lang: SupportedLanguages\n): boolean {\n const existing = CUSTOM_EXTENSION_TO_FILE_FORMAT.get(key);\n if (existing === lang) {\n return false;\n }\n if (existing != null) {\n console.warn(\n `setCustomExtension: overriding custom mapping for \"${key}\" from \"${existing}\" to \"${lang}\"`\n );\n }\n CUSTOM_EXTENSION_TO_FILE_FORMAT.set(key, lang);\n customExtensionsVersion++;\n return true;\n}\n\nexport function getCustomExtensionsMap(): ExtensionFormatMap {\n return Object.fromEntries(\n CUSTOM_EXTENSION_TO_FILE_FORMAT\n ) as ExtensionFormatMap;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"getFiletypeFromFileName.js","names":[],"sources":["../../src/utils/getFiletypeFromFileName.ts"],"sourcesContent":["import type { ExtensionFormatMap, SupportedLanguages } from '../types';\n\nconst CUSTOM_EXTENSION_TO_FILE_FORMAT: Map<string, SupportedLanguages> =\n new Map();\n\nlet customExtensionsVersion = 0;\n\nexport const EXTENSION_TO_FILE_FORMAT: ExtensionFormatMap = {\n '1c': '1c',\n abap: 'abap',\n as: 'actionscript-3',\n ada: 'ada',\n adb: 'ada',\n ads: 'ada',\n adoc: 'asciidoc',\n asciidoc: 'asciidoc',\n 'component.html': 'angular-html',\n 'component.ts': 'angular-ts',\n conf: 'nginx',\n htaccess: 'apache',\n cls: 'tex',\n trigger: 'apex',\n apl: 'apl',\n applescript: 'applescript',\n scpt: 'applescript',\n ara: 'ara',\n asm: 'asm',\n s: 'riscv',\n astro: 'astro',\n awk: 'awk',\n bal: 'ballerina',\n sh: 'zsh',\n bash: 'zsh',\n bat: 'cmd',\n cmd: 'cmd',\n be: 'berry',\n beancount: 'beancount',\n bib: 'bibtex',\n bicep: 'bicep',\n 'blade.php': 'blade',\n bsl: 'bsl',\n c: 'c',\n h: 'objective-cpp',\n cs: 'csharp',\n cpp: 'cpp',\n hpp: 'cpp',\n cc: 'cpp',\n cxx: 'cpp',\n hh: 'cpp',\n cdc: 'cdc',\n cairo: 'cairo',\n clar: 'clarity',\n clj: 'clojure',\n cljs: 'clojure',\n cljc: 'clojure',\n soy: 'soy',\n cmake: 'cmake',\n 'CMakeLists.txt': 'cmake',\n cob: 'cobol',\n cbl: 'cobol',\n cobol: 'cobol',\n CODEOWNERS: 'codeowners',\n ql: 'ql',\n coffee: 'coffeescript',\n lisp: 'lisp',\n cl: 'lisp',\n lsp: 'lisp',\n log: 'log',\n v: 'verilog',\n cql: 'cql',\n cr: 'crystal',\n css: 'css',\n csv: 'csv',\n cue: 'cue',\n cypher: 'cypher',\n cyp: 'cypher',\n d: 'd',\n dart: 'dart',\n dax: 'dax',\n desktop: 'desktop',\n diff: 'diff',\n patch: 'diff',\n Dockerfile: 'dockerfile',\n dockerfile: 'dockerfile',\n env: 'dotenv',\n dm: 'dream-maker',\n edge: 'edge',\n el: 'emacs-lisp',\n ex: 'elixir',\n exs: 'elixir',\n elm: 'elm',\n erb: 'erb',\n erl: 'erlang',\n hrl: 'erlang',\n f: 'fortran-fixed-form',\n for: 'fortran-fixed-form',\n fs: 'fsharp',\n fsi: 'fsharp',\n fsx: 'fsharp',\n f03: 'f03',\n f08: 'f08',\n f18: 'f18',\n f77: 'f77',\n f90: 'fortran-free-form',\n f95: 'fortran-free-form',\n fnl: 'fennel',\n fish: 'fish',\n ftl: 'ftl',\n tres: 'gdresource',\n res: 'gdresource',\n gd: 'gdscript',\n gdshader: 'gdshader',\n gs: 'genie',\n feature: 'gherkin',\n COMMIT_EDITMSG: 'git-commit',\n 'git-rebase-todo': 'git-rebase',\n gjs: 'glimmer-js',\n gleam: 'gleam',\n gts: 'glimmer-ts',\n glsl: 'glsl',\n vert: 'glsl',\n frag: 'glsl',\n shader: 'shaderlab',\n gp: 'gnuplot',\n plt: 'gnuplot',\n gnuplot: 'gnuplot',\n go: 'go',\n graphql: 'graphql',\n gql: 'graphql',\n groovy: 'groovy',\n gvy: 'groovy',\n hack: 'hack',\n haml: 'haml',\n hbs: 'handlebars',\n handlebars: 'handlebars',\n hs: 'haskell',\n lhs: 'haskell',\n hx: 'haxe',\n hcl: 'hcl',\n hjson: 'hjson',\n hlsl: 'hlsl',\n fx: 'hlsl',\n html: 'html',\n htm: 'html',\n http: 'http',\n rest: 'http',\n hxml: 'hxml',\n hy: 'hy',\n imba: 'imba',\n ini: 'ini',\n cfg: 'ini',\n jade: 'pug',\n pug: 'pug',\n java: 'java',\n js: 'javascript',\n mjs: 'javascript',\n cjs: 'javascript',\n jinja: 'jinja',\n jinja2: 'jinja',\n j2: 'jinja',\n jison: 'jison',\n jl: 'julia',\n json: 'json',\n json5: 'json5',\n jsonc: 'jsonc',\n jsonl: 'jsonl',\n jsonnet: 'jsonnet',\n libsonnet: 'jsonnet',\n jssm: 'jssm',\n jsx: 'jsx',\n kt: 'kotlin',\n kts: 'kts',\n kql: 'kusto',\n tex: 'tex',\n ltx: 'tex',\n lean: 'lean4',\n less: 'less',\n liquid: 'liquid',\n lit: 'lit',\n ll: 'llvm',\n logo: 'logo',\n lua: 'lua',\n luau: 'luau',\n Makefile: 'makefile',\n mk: 'makefile',\n makefile: 'makefile',\n md: 'markdown',\n markdown: 'markdown',\n marko: 'marko',\n m: 'wolfram',\n mat: 'matlab',\n mdc: 'mdc',\n mdx: 'mdx',\n wiki: 'wikitext',\n mediawiki: 'wikitext',\n mmd: 'mermaid',\n mermaid: 'mermaid',\n mips: 'mipsasm',\n mojo: 'mojo',\n '🔥': 'mojo',\n move: 'move',\n nar: 'narrat',\n nf: 'nextflow',\n nim: 'nim',\n nims: 'nim',\n nimble: 'nim',\n nix: 'nix',\n nu: 'nushell',\n mm: 'objective-cpp',\n ml: 'ocaml',\n mli: 'ocaml',\n mll: 'ocaml',\n mly: 'ocaml',\n pas: 'pascal',\n p: 'pascal',\n pl: 'prolog',\n pm: 'perl',\n t: 'perl',\n raku: 'raku',\n p6: 'raku',\n pl6: 'raku',\n php: 'php',\n phtml: 'php',\n pls: 'plsql',\n sql: 'sql',\n po: 'po',\n polar: 'polar',\n pcss: 'postcss',\n pot: 'pot',\n potx: 'potx',\n pq: 'powerquery',\n pqm: 'powerquery',\n ps1: 'powershell',\n psm1: 'powershell',\n psd1: 'powershell',\n prisma: 'prisma',\n pro: 'prolog',\n P: 'prolog',\n properties: 'properties',\n proto: 'protobuf',\n pp: 'puppet',\n purs: 'purescript',\n py: 'python',\n pyw: 'python',\n pyi: 'python',\n qml: 'qml',\n qmldir: 'qmldir',\n qss: 'qss',\n r: 'r',\n R: 'r',\n rkt: 'racket',\n rktl: 'racket',\n razor: 'razor',\n cshtml: 'razor',\n rb: 'ruby',\n rbw: 'ruby',\n reg: 'reg',\n regex: 'regexp',\n rel: 'rel',\n rs: 'rust',\n rst: 'rst',\n rake: 'ruby',\n gemspec: 'ruby',\n jbuilder: 'ruby',\n builder: 'ruby',\n rabl: 'ruby',\n arb: 'ruby',\n ru: 'ruby',\n podspec: 'ruby',\n Gemfile: 'ruby',\n Rakefile: 'ruby',\n Guardfile: 'ruby',\n Capfile: 'ruby',\n Berksfile: 'ruby',\n Brewfile: 'ruby',\n Vagrantfile: 'ruby',\n Thorfile: 'ruby',\n Appraisals: 'ruby',\n Dangerfile: 'ruby',\n sas: 'sas',\n sass: 'sass',\n scala: 'scala',\n sc: 'scala',\n scm: 'scheme',\n ss: 'scheme',\n sld: 'scheme',\n scss: 'scss',\n sdbl: 'sdbl',\n shadergraph: 'shader',\n st: 'smalltalk',\n sol: 'solidity',\n sparql: 'sparql',\n rq: 'sparql',\n spl: 'splunk',\n config: 'ssh-config',\n do: 'stata',\n ado: 'stata',\n dta: 'stata',\n styl: 'stylus',\n stylus: 'stylus',\n svelte: 'svelte',\n swift: 'swift',\n sv: 'system-verilog',\n svh: 'system-verilog',\n service: 'systemd',\n socket: 'systemd',\n device: 'systemd',\n timer: 'systemd',\n talon: 'talonscript',\n tasl: 'tasl',\n tcl: 'tcl',\n templ: 'templ',\n tf: 'tf',\n tfvars: 'tfvars',\n toml: 'toml',\n ts: 'typescript',\n mts: 'typescript',\n cts: 'typescript',\n tsp: 'typespec',\n tsv: 'tsv',\n tsx: 'tsx',\n ttl: 'turtle',\n twig: 'twig',\n typ: 'typst',\n vv: 'v',\n vala: 'vala',\n vapi: 'vala',\n vb: 'vb',\n vbs: 'vb',\n bas: 'vb',\n vh: 'verilog',\n vhd: 'vhdl',\n vhdl: 'vhdl',\n vim: 'vimscript',\n vue: 'vue',\n 'vine.ts': 'vue-vine',\n vy: 'vyper',\n wasm: 'wasm',\n wat: 'wasm',\n wy: '文言',\n wgsl: 'wgsl',\n wit: 'wit',\n wl: 'wolfram',\n nb: 'wolfram',\n xml: 'xml',\n xsl: 'xsl',\n xslt: 'xsl',\n yaml: 'yaml',\n yml: 'yml',\n zs: 'zenscript',\n zig: 'zig',\n zsh: 'zsh',\n sty: 'tex',\n};\n\nexport function getFiletypeFromFileName(fileName: string): SupportedLanguages {\n if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(fileName)) {\n return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(fileName) ?? 'text';\n }\n // Handle special files without extensions first\n if (EXTENSION_TO_FILE_FORMAT[fileName] != null) {\n return EXTENSION_TO_FILE_FORMAT[fileName];\n }\n\n // Try compound extensions first (e.g., .blade.php, .component.ts)\n const compoundMatch = fileName.match(/\\.([^/\\\\]+\\.[^/\\\\]+)$/);\n if (compoundMatch != null) {\n if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(compoundMatch[1])) {\n return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(compoundMatch[1]) ?? 'text';\n }\n if (EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] != null) {\n return EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] ?? 'text';\n }\n }\n\n // Fall back to simple extension\n const simpleMatch = fileName.match(/\\.([^.]+)$/)?.[1] ?? '';\n if (CUSTOM_EXTENSION_TO_FILE_FORMAT.has(simpleMatch)) {\n return CUSTOM_EXTENSION_TO_FILE_FORMAT.get(simpleMatch) ?? 'text';\n }\n return EXTENSION_TO_FILE_FORMAT[simpleMatch] ?? 'text';\n}\n\nexport function replaceCustomExtensions(\n version: number,\n map: ExtensionFormatMap\n): boolean {\n if (version <= customExtensionsVersion) {\n return false;\n }\n CUSTOM_EXTENSION_TO_FILE_FORMAT.clear();\n for (const key in map) {\n const lang = map[key];\n if (lang != null) {\n CUSTOM_EXTENSION_TO_FILE_FORMAT.set(key, lang);\n }\n }\n customExtensionsVersion = version;\n return true;\n}\n\nexport function getCustomExtensionsVersion(): number {\n return customExtensionsVersion;\n}\n\nexport function setCustomExtension(\n key: string,\n lang: SupportedLanguages\n): boolean {\n const existing = CUSTOM_EXTENSION_TO_FILE_FORMAT.get(key);\n if (existing === lang) {\n return false;\n }\n if (existing != null) {\n console.warn(\n `setCustomExtension: overriding custom mapping for \"${key}\" from \"${existing}\" to \"${lang}\"`\n );\n }\n CUSTOM_EXTENSION_TO_FILE_FORMAT.set(key, lang);\n customExtensionsVersion++;\n return true;\n}\n\nexport function getCustomExtensionsMap(): ExtensionFormatMap {\n return Object.fromEntries(\n CUSTOM_EXTENSION_TO_FILE_FORMAT\n ) as ExtensionFormatMap;\n}\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { FileDiffLoadedFiles, FileDiffMetadata } from "../types.js";
2
+
3
+ //#region src/utils/hydratePartialDiff.d.ts
4
+ /**
5
+ * Hydrates a partial diff in place with full file line arrays.
6
+ */
7
+ declare function hydratePartialDiff(type: 'clone' | 'merge', fileDiff: FileDiffMetadata, files: FileDiffLoadedFiles): FileDiffMetadata;
8
+ //#endregion
9
+ export { hydratePartialDiff };
10
+ //# sourceMappingURL=hydratePartialDiff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydratePartialDiff.d.ts","names":[],"sources":["../../src/utils/hydratePartialDiff.ts"],"mappings":";;;;;AAkBA;iBAAgB,kBAAA,CACd,IAAA,qBACA,QAAA,EAAU,gBAAA,EACV,KAAA,EAAO,mBAAA,GACN,gBAAA"}
@@ -0,0 +1,140 @@
1
+ import { cloneFileDiffMetadata } from "./cloneFileDiffMetadata.js";
2
+ import { splitFileContents } from "./splitFileContents.js";
3
+ //#region src/utils/hydratePartialDiff.ts
4
+ /**
5
+ * Hydrates a partial diff in place with full file line arrays.
6
+ */
7
+ function hydratePartialDiff(type, fileDiff, files) {
8
+ const targetFileDiff = type === "clone" ? cloneFileDiffMetadata(fileDiff) : fileDiff;
9
+ if (!targetFileDiff.isPartial) throw new Error("hydratePartialDiff: fileDiff must be partial");
10
+ switch (targetFileDiff.type) {
11
+ case "change":
12
+ case "rename-changed": return hydrateTwoSidedFileDiff(targetFileDiff, requireOldFile(targetFileDiff, files), requireNewFile(targetFileDiff, files));
13
+ case "rename-pure": {
14
+ const newFile = requireNewFile(targetFileDiff, files);
15
+ requireMissingOldFile(targetFileDiff, files);
16
+ const lines = splitFileContents(newFile.contents);
17
+ targetFileDiff.isPartial = false;
18
+ targetFileDiff.deletionLines = lines;
19
+ targetFileDiff.additionLines = lines;
20
+ setHydratedCacheKey(targetFileDiff, null, newFile);
21
+ return targetFileDiff;
22
+ }
23
+ }
24
+ throw new Error(`hydratePartialDiff: ${targetFileDiff.type} diffs cannot be hydrated from loaded files`);
25
+ }
26
+ function hydrateTwoSidedFileDiff(fileDiff, oldFile, newFile) {
27
+ const deletionLines = splitFileContents(oldFile.contents);
28
+ const additionLines = splitFileContents(newFile.contents);
29
+ const { hunks, splitLineCount, unifiedLineCount } = hydrateHunks(fileDiff.hunks, additionLines.length);
30
+ fileDiff.hunks = hunks;
31
+ fileDiff.splitLineCount = splitLineCount;
32
+ fileDiff.unifiedLineCount = unifiedLineCount;
33
+ fileDiff.isPartial = false;
34
+ fileDiff.deletionLines = deletionLines;
35
+ fileDiff.additionLines = additionLines;
36
+ setHydratedCacheKey(fileDiff, oldFile, newFile);
37
+ return fileDiff;
38
+ }
39
+ function hydrateHunks(hunks, totalAdditionLines) {
40
+ let splitLineCount = 0;
41
+ let unifiedLineCount = 0;
42
+ let lastHunkAdditionEnd = 0;
43
+ const hydratedHunks = [];
44
+ for (const hunk of hunks) {
45
+ const additionLineIndex = Math.max(hunk.additionStart - 1, 0);
46
+ const deletionLineIndex = Math.max(hunk.deletionStart - 1, 0);
47
+ let contentAdditionLineIndex = additionLineIndex;
48
+ let contentDeletionLineIndex = deletionLineIndex;
49
+ let hunkAdditionLines = 0;
50
+ let hunkDeletionLines = 0;
51
+ let hunkSplitLineCount = 0;
52
+ let hunkUnifiedLineCount = 0;
53
+ const hunkContent = [];
54
+ for (const content of hunk.hunkContent) {
55
+ if (content.type === "context") {
56
+ hunkContent.push({
57
+ ...content,
58
+ additionLineIndex: contentAdditionLineIndex,
59
+ deletionLineIndex: contentDeletionLineIndex
60
+ });
61
+ contentAdditionLineIndex += content.lines;
62
+ contentDeletionLineIndex += content.lines;
63
+ hunkSplitLineCount += content.lines;
64
+ hunkUnifiedLineCount += content.lines;
65
+ continue;
66
+ }
67
+ hunkContent.push({
68
+ ...content,
69
+ additionLineIndex: contentAdditionLineIndex,
70
+ deletionLineIndex: contentDeletionLineIndex
71
+ });
72
+ contentAdditionLineIndex += content.additions;
73
+ contentDeletionLineIndex += content.deletions;
74
+ hunkAdditionLines += content.additions;
75
+ hunkDeletionLines += content.deletions;
76
+ hunkSplitLineCount += Math.max(content.additions, content.deletions);
77
+ hunkUnifiedLineCount += content.additions + content.deletions;
78
+ }
79
+ const collapsedBefore = Math.max(hunk.additionStart - 1 - lastHunkAdditionEnd, 0);
80
+ hydratedHunks.push({
81
+ ...hunk,
82
+ collapsedBefore,
83
+ additionLineIndex,
84
+ deletionLineIndex,
85
+ additionLines: hunkAdditionLines,
86
+ deletionLines: hunkDeletionLines,
87
+ hunkContent,
88
+ splitLineStart: splitLineCount + collapsedBefore,
89
+ unifiedLineStart: unifiedLineCount + collapsedBefore,
90
+ splitLineCount: hunkSplitLineCount,
91
+ unifiedLineCount: hunkUnifiedLineCount
92
+ });
93
+ splitLineCount += collapsedBefore + hunkSplitLineCount;
94
+ unifiedLineCount += collapsedBefore + hunkUnifiedLineCount;
95
+ lastHunkAdditionEnd = hunk.additionStart + hunk.additionCount - 1;
96
+ }
97
+ if (hydratedHunks.length > 0) {
98
+ const lastHunk = hydratedHunks[hydratedHunks.length - 1];
99
+ const lastHunkEnd = Math.max(lastHunk.additionStart + lastHunk.additionCount - 1, 0);
100
+ const collapsedAfter = Math.max(totalAdditionLines - lastHunkEnd, 0);
101
+ splitLineCount += collapsedAfter;
102
+ unifiedLineCount += collapsedAfter;
103
+ }
104
+ return {
105
+ hunks: hydratedHunks,
106
+ splitLineCount,
107
+ unifiedLineCount
108
+ };
109
+ }
110
+ function requireOldFile(fileDiff, files) {
111
+ if (files.oldFile == null) throw new Error(`hydratePartialDiff: ${fileDiff.type} diff for ${fileDiff.name} requires oldFile`);
112
+ return files.oldFile;
113
+ }
114
+ function requireNewFile(fileDiff, files) {
115
+ if (files.newFile == null) throw new Error(`hydratePartialDiff: ${fileDiff.type} diff for ${fileDiff.name} requires newFile`);
116
+ return files.newFile;
117
+ }
118
+ function requireMissingOldFile(fileDiff, files) {
119
+ if (files.oldFile !== null) throw new Error(`hydratePartialDiff: ${fileDiff.type} diff for ${fileDiff.name} requires oldFile to be null`);
120
+ }
121
+ function getHydratedCacheKey(fileDiff, oldFile, newFile) {
122
+ if (fileDiff.cacheKey != null) return `${fileDiff.cacheKey}:hydrated`;
123
+ return getLoadedFileCacheKey(oldFile, newFile);
124
+ }
125
+ function setHydratedCacheKey(fileDiff, oldFile, newFile) {
126
+ const cacheKey = getHydratedCacheKey(fileDiff, oldFile, newFile);
127
+ if (cacheKey == null) {
128
+ delete fileDiff.cacheKey;
129
+ return;
130
+ }
131
+ fileDiff.cacheKey = cacheKey;
132
+ }
133
+ function getLoadedFileCacheKey(oldFile, newFile) {
134
+ if (oldFile != null && newFile != null) return oldFile.cacheKey != null && newFile.cacheKey != null ? `${oldFile.cacheKey}:${newFile.cacheKey}` : void 0;
135
+ return oldFile?.cacheKey ?? newFile?.cacheKey;
136
+ }
137
+ //#endregion
138
+ export { hydratePartialDiff };
139
+
140
+ //# sourceMappingURL=hydratePartialDiff.js.map