@pierre/diffs 1.1.0-beta.9 → 1.1.0

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 (218) hide show
  1. package/README.md +7 -18
  2. package/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +1 -1
  3. package/dist/components/AdvancedVirtualizedFileDiff.js +2 -7
  4. package/dist/components/AdvancedVirtualizedFileDiff.js.map +1 -1
  5. package/dist/components/AdvancedVirtualizer.js +1 -1
  6. package/dist/components/AdvancedVirtualizer.js.map +1 -1
  7. package/dist/components/File.d.ts +17 -7
  8. package/dist/components/File.d.ts.map +1 -1
  9. package/dist/components/File.js +111 -54
  10. package/dist/components/File.js.map +1 -1
  11. package/dist/components/FileDiff.d.ts +32 -14
  12. package/dist/components/FileDiff.d.ts.map +1 -1
  13. package/dist/components/FileDiff.js +156 -81
  14. package/dist/components/FileDiff.js.map +1 -1
  15. package/dist/components/UnresolvedFile.d.ts +60 -0
  16. package/dist/components/UnresolvedFile.d.ts.map +1 -0
  17. package/dist/components/UnresolvedFile.js +280 -0
  18. package/dist/components/UnresolvedFile.js.map +1 -0
  19. package/dist/components/VirtualizedFile.js +8 -5
  20. package/dist/components/VirtualizedFile.js.map +1 -1
  21. package/dist/components/VirtualizedFileDiff.d.ts +1 -1
  22. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  23. package/dist/components/VirtualizedFileDiff.js +15 -11
  24. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  25. package/dist/components/Virtualizer.d.ts +3 -1
  26. package/dist/components/Virtualizer.d.ts.map +1 -1
  27. package/dist/components/Virtualizer.js +50 -24
  28. package/dist/components/Virtualizer.js.map +1 -1
  29. package/dist/constants.d.ts +3 -1
  30. package/dist/constants.d.ts.map +1 -1
  31. package/dist/constants.js +8 -1
  32. package/dist/constants.js.map +1 -1
  33. package/dist/highlighter/shared_highlighter.d.ts +4 -2
  34. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  35. package/dist/highlighter/shared_highlighter.js +15 -7
  36. package/dist/highlighter/shared_highlighter.js.map +1 -1
  37. package/dist/index.d.ts +9 -7
  38. package/dist/index.js +8 -6
  39. package/dist/managers/InteractionManager.d.ts +146 -0
  40. package/dist/managers/InteractionManager.d.ts.map +1 -0
  41. package/dist/managers/InteractionManager.js +813 -0
  42. package/dist/managers/InteractionManager.js.map +1 -0
  43. package/dist/managers/ResizeManager.d.ts +0 -2
  44. package/dist/managers/ResizeManager.d.ts.map +1 -1
  45. package/dist/managers/ResizeManager.js +43 -32
  46. package/dist/managers/ResizeManager.js.map +1 -1
  47. package/dist/react/File.d.ts +2 -0
  48. package/dist/react/File.d.ts.map +1 -1
  49. package/dist/react/File.js +3 -1
  50. package/dist/react/File.js.map +1 -1
  51. package/dist/react/FileDiff.d.ts +2 -0
  52. package/dist/react/FileDiff.d.ts.map +1 -1
  53. package/dist/react/FileDiff.js +3 -1
  54. package/dist/react/FileDiff.js.map +1 -1
  55. package/dist/react/MultiFileDiff.d.ts +2 -0
  56. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  57. package/dist/react/MultiFileDiff.js +3 -1
  58. package/dist/react/MultiFileDiff.js.map +1 -1
  59. package/dist/react/PatchDiff.d.ts +2 -0
  60. package/dist/react/PatchDiff.d.ts.map +1 -1
  61. package/dist/react/PatchDiff.js +3 -1
  62. package/dist/react/PatchDiff.js.map +1 -1
  63. package/dist/react/UnresolvedFile.d.ts +36 -0
  64. package/dist/react/UnresolvedFile.d.ts.map +1 -0
  65. package/dist/react/UnresolvedFile.js +42 -0
  66. package/dist/react/UnresolvedFile.js.map +1 -0
  67. package/dist/react/constants.d.ts +3 -2
  68. package/dist/react/constants.d.ts.map +1 -1
  69. package/dist/react/constants.js +3 -2
  70. package/dist/react/constants.js.map +1 -1
  71. package/dist/react/index.d.ts +4 -3
  72. package/dist/react/index.js +3 -2
  73. package/dist/react/types.d.ts +11 -2
  74. package/dist/react/types.d.ts.map +1 -1
  75. package/dist/react/utils/renderDiffChildren.d.ts +16 -5
  76. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  77. package/dist/react/utils/renderDiffChildren.js +34 -7
  78. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  79. package/dist/react/utils/renderFileChildren.d.ts +5 -1
  80. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  81. package/dist/react/utils/renderFileChildren.js +13 -7
  82. package/dist/react/utils/renderFileChildren.js.map +1 -1
  83. package/dist/react/utils/useFileDiffInstance.d.ts +1 -2
  84. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  85. package/dist/react/utils/useFileDiffInstance.js +2 -2
  86. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  87. package/dist/react/utils/useFileInstance.d.ts +1 -2
  88. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  89. package/dist/react/utils/useFileInstance.js.map +1 -1
  90. package/dist/react/utils/useUnresolvedFileInstance.d.ts +33 -0
  91. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -0
  92. package/dist/react/utils/useUnresolvedFileInstance.js +87 -0
  93. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -0
  94. package/dist/renderers/DiffHunksRenderer.d.ts +50 -6
  95. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  96. package/dist/renderers/DiffHunksRenderer.js +145 -45
  97. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  98. package/dist/renderers/FileRenderer.js +1 -1
  99. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts +46 -0
  100. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -0
  101. package/dist/renderers/UnresolvedFileHunksRenderer.js +207 -0
  102. package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -0
  103. package/dist/shiki-stream/stream.d.ts +1 -1
  104. package/dist/shiki-stream/stream.d.ts.map +1 -1
  105. package/dist/shiki-stream/stream.js.map +1 -1
  106. package/dist/shiki-stream/tokenizer.d.ts +1 -1
  107. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  108. package/dist/shiki-stream/tokenizer.js.map +1 -1
  109. package/dist/shiki-stream/types.d.ts +1 -1
  110. package/dist/shiki-stream/types.d.ts.map +1 -1
  111. package/dist/sprite.d.ts +2 -2
  112. package/dist/sprite.d.ts.map +1 -1
  113. package/dist/sprite.js +3 -0
  114. package/dist/sprite.js.map +1 -1
  115. package/dist/ssr/index.d.ts +3 -3
  116. package/dist/ssr/index.js +2 -2
  117. package/dist/ssr/preloadDiffs.d.ts +23 -14
  118. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  119. package/dist/ssr/preloadDiffs.js +40 -14
  120. package/dist/ssr/preloadDiffs.js.map +1 -1
  121. package/dist/style.js +1 -1
  122. package/dist/style.js.map +1 -1
  123. package/dist/types.d.ts +29 -2
  124. package/dist/types.d.ts.map +1 -1
  125. package/dist/utils/areMergeConflictActionsEqual.d.ts +7 -0
  126. package/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -0
  127. package/dist/utils/areMergeConflictActionsEqual.js +11 -0
  128. package/dist/utils/areMergeConflictActionsEqual.js.map +1 -0
  129. package/dist/utils/arePrePropertiesEqual.js +10 -1
  130. package/dist/utils/arePrePropertiesEqual.js.map +1 -1
  131. package/dist/utils/areSelectionPointsEqual.d.ts +7 -0
  132. package/dist/utils/areSelectionPointsEqual.d.ts.map +1 -0
  133. package/dist/utils/areSelectionPointsEqual.js +8 -0
  134. package/dist/utils/areSelectionPointsEqual.js.map +1 -0
  135. package/dist/utils/areSelectionsEqual.d.ts +1 -1
  136. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  137. package/dist/utils/areSelectionsEqual.js.map +1 -1
  138. package/dist/utils/createFileHeaderElement.js +5 -2
  139. package/dist/utils/createFileHeaderElement.js.map +1 -1
  140. package/dist/utils/createGutterUtilityContentNode.d.ts +5 -0
  141. package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -0
  142. package/dist/utils/createGutterUtilityContentNode.js +15 -0
  143. package/dist/utils/createGutterUtilityContentNode.js.map +1 -0
  144. package/dist/utils/createGutterUtilityElement.d.ts +7 -0
  145. package/dist/utils/createGutterUtilityElement.d.ts.map +1 -0
  146. package/dist/utils/createGutterUtilityElement.js +20 -0
  147. package/dist/utils/createGutterUtilityElement.js.map +1 -0
  148. package/dist/utils/createPreElement.d.ts +2 -1
  149. package/dist/utils/createPreElement.d.ts.map +1 -1
  150. package/dist/utils/createPreElement.js +2 -1
  151. package/dist/utils/createPreElement.js.map +1 -1
  152. package/dist/utils/createSeparator.js +1 -1
  153. package/dist/utils/createSeparator.js.map +1 -1
  154. package/dist/utils/createWindowFromScrollPosition.js +12 -11
  155. package/dist/utils/createWindowFromScrollPosition.js.map +1 -1
  156. package/dist/utils/getHighlighterOptions.d.ts +7 -2
  157. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  158. package/dist/utils/getHighlighterOptions.js +3 -2
  159. package/dist/utils/getHighlighterOptions.js.map +1 -1
  160. package/dist/utils/getMergeConflictActionSlotName.d.ts +16 -0
  161. package/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -0
  162. package/dist/utils/getMergeConflictActionSlotName.js +8 -0
  163. package/dist/utils/getMergeConflictActionSlotName.js.map +1 -0
  164. package/dist/utils/getMergeConflictLineTypes.d.ts +15 -0
  165. package/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -0
  166. package/dist/utils/getMergeConflictLineTypes.js +81 -0
  167. package/dist/utils/getMergeConflictLineTypes.js.map +1 -0
  168. package/dist/utils/getOrCreateCodeNode.d.ts +3 -1
  169. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  170. package/dist/utils/getOrCreateCodeNode.js +5 -3
  171. package/dist/utils/getOrCreateCodeNode.js.map +1 -1
  172. package/dist/utils/hast_utils.d.ts +2 -2
  173. package/dist/utils/hast_utils.d.ts.map +1 -1
  174. package/dist/utils/hast_utils.js +3 -2
  175. package/dist/utils/hast_utils.js.map +1 -1
  176. package/dist/utils/parseMergeConflictDiffFromFile.d.ts +26 -0
  177. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -0
  178. package/dist/utils/parseMergeConflictDiffFromFile.js +143 -0
  179. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -0
  180. package/dist/utils/resolveMergeConflict.d.ts +7 -0
  181. package/dist/utils/resolveMergeConflict.d.ts.map +1 -0
  182. package/dist/utils/resolveMergeConflict.js +30 -0
  183. package/dist/utils/resolveMergeConflict.js.map +1 -0
  184. package/dist/utils/resolveVirtualFileMetrics.js +1 -0
  185. package/dist/utils/resolveVirtualFileMetrics.js.map +1 -1
  186. package/dist/utils/setWrapperNodeProps.d.ts +2 -1
  187. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  188. package/dist/utils/setWrapperNodeProps.js +5 -1
  189. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  190. package/dist/worker/WorkerPoolManager.d.ts +4 -2
  191. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  192. package/dist/worker/WorkerPoolManager.js +16 -9
  193. package/dist/worker/WorkerPoolManager.js.map +1 -1
  194. package/dist/worker/types.d.ts +3 -1
  195. package/dist/worker/types.d.ts.map +1 -1
  196. package/dist/worker/wasm-BlUZCxHM.js +10 -0
  197. package/dist/worker/wasm-BlUZCxHM.js.map +1 -0
  198. package/dist/worker/worker-portable.js +10546 -10106
  199. package/dist/worker/worker-portable.js.map +1 -1
  200. package/dist/worker/worker.js +27 -19
  201. package/dist/worker/worker.js.map +1 -1
  202. package/package.json +3 -7
  203. package/dist/managers/LineSelectionManager.d.ts +0 -64
  204. package/dist/managers/LineSelectionManager.d.ts.map +0 -1
  205. package/dist/managers/LineSelectionManager.js +0 -270
  206. package/dist/managers/LineSelectionManager.js.map +0 -1
  207. package/dist/managers/MouseEventManager.d.ts +0 -71
  208. package/dist/managers/MouseEventManager.d.ts.map +0 -1
  209. package/dist/managers/MouseEventManager.js +0 -358
  210. package/dist/managers/MouseEventManager.js.map +0 -1
  211. package/dist/themes/pierre-dark.js +0 -1328
  212. package/dist/themes/pierre-dark.js.map +0 -1
  213. package/dist/themes/pierre-light.js +0 -1328
  214. package/dist/themes/pierre-light.js.map +0 -1
  215. package/dist/utils/createHoverContentNode.d.ts +0 -5
  216. package/dist/utils/createHoverContentNode.d.ts.map +0 -1
  217. package/dist/utils/createHoverContentNode.js +0 -15
  218. package/dist/utils/createHoverContentNode.js.map +0 -1
@@ -0,0 +1,15 @@
1
+ import { MergeConflictRegion } from "../types.js";
2
+
3
+ //#region src/utils/getMergeConflictLineTypes.d.ts
4
+ type MergeConflictLineType = 'none' | 'marker-start' | 'marker-base' | 'marker-separator' | 'marker-end' | 'current' | 'base' | 'incoming';
5
+ interface MergeConflictParseResult {
6
+ lineTypes: MergeConflictLineType[];
7
+ regions: MergeConflictRegion[];
8
+ }
9
+ declare function getMergeConflictLineTypes(lines: string[]): MergeConflictLineType[];
10
+ declare function getMergeConflictRegions(lines: string[]): MergeConflictRegion[];
11
+ declare function getMergeConflictParseResult(lines: string[]): MergeConflictParseResult;
12
+ declare function getMergeConflictActionLineNumber(conflict: MergeConflictRegion): number;
13
+ //#endregion
14
+ export { MergeConflictLineType, MergeConflictParseResult, getMergeConflictActionLineNumber, getMergeConflictLineTypes, getMergeConflictParseResult, getMergeConflictRegions };
15
+ //# sourceMappingURL=getMergeConflictLineTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMergeConflictLineTypes.d.ts","names":["MergeConflictRegion","MergeConflictLineType","MergeConflictParseResult","getMergeConflictLineTypes","getMergeConflictRegions","getMergeConflictParseResult","getMergeConflictActionLineNumber"],"sources":["../../src/utils/getMergeConflictLineTypes.d.ts"],"sourcesContent":["import type { MergeConflictRegion } from '../types';\nexport type MergeConflictLineType = 'none' | 'marker-start' | 'marker-base' | 'marker-separator' | 'marker-end' | 'current' | 'base' | 'incoming';\nexport interface MergeConflictParseResult {\n lineTypes: MergeConflictLineType[];\n regions: MergeConflictRegion[];\n}\nexport declare function getMergeConflictLineTypes(lines: string[]): MergeConflictLineType[];\nexport declare function getMergeConflictRegions(lines: string[]): MergeConflictRegion[];\nexport declare function getMergeConflictParseResult(lines: string[]): MergeConflictParseResult;\nexport declare function getMergeConflictActionLineNumber(conflict: MergeConflictRegion): number;\n//# sourceMappingURL=getMergeConflictLineTypes.d.ts.map"],"mappings":";;;KACYC,qBAAAA;UACKC,wBAAAA;EADLD,SAAAA,EAEGA,qBAFkB,EAAA;EAChBC,OAAAA,EAEJF,mBAF4B,EAAA;AAIzC;AACwBI,iBADAD,yBAAAA,CAC0CH,KAAAA,EAAAA,MAAmB,EAAA,CAAA,EADjBC,qBACiB,EAAA;AAC7DI,iBADAD,uBAAAA,CAC8CF,KAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EADJF,mBAC4B,EAAA;AACtEM,iBADAD,2BAAAA,CAC2CL,KAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EADGE,wBACgB;iBAA9DI,gCAAAA,WAA2CN"}
@@ -0,0 +1,81 @@
1
+ //#region src/utils/getMergeConflictLineTypes.ts
2
+ const START_MARKER = /^<{7,}(?:\s.*)?$/;
3
+ const BASE_MARKER = /^\|{7,}(?:\s.*)?$/;
4
+ const SEPARATOR_MARKER = /^={7,}(?:\s.*)?$/;
5
+ const END_MARKER = /^>{7,}(?:\s.*)?$/;
6
+ function trimLineEnding(line) {
7
+ return line.replace(/(?:\r\n|\n|\r)$/, "");
8
+ }
9
+ function getMergeConflictLineTypes(lines) {
10
+ return getMergeConflictParseResult(lines).lineTypes;
11
+ }
12
+ function getMergeConflictRegions(lines) {
13
+ return getMergeConflictParseResult(lines).regions;
14
+ }
15
+ function getMergeConflictParseResult(lines) {
16
+ return parseMergeConflicts(lines);
17
+ }
18
+ function getMergeConflictActionLineNumber(conflict) {
19
+ return Math.max(1, conflict.startLineNumber - 1);
20
+ }
21
+ function parseMergeConflicts(lines) {
22
+ const lineTypes = new Array(lines.length);
23
+ const stack = [];
24
+ const regions = [];
25
+ for (let index = 0; index < lines.length; index++) {
26
+ const line = trimLineEnding(lines[index]);
27
+ if (START_MARKER.test(line)) {
28
+ stack.push({
29
+ stage: "current",
30
+ startLineIndex: index
31
+ });
32
+ lineTypes[index] = "marker-start";
33
+ continue;
34
+ }
35
+ const frame = stack.at(-1);
36
+ if (frame == null) {
37
+ lineTypes[index] = "none";
38
+ continue;
39
+ }
40
+ if (BASE_MARKER.test(line)) {
41
+ frame.stage = "base";
42
+ frame.baseMarkerLineIndex = index;
43
+ lineTypes[index] = "marker-base";
44
+ continue;
45
+ }
46
+ if (SEPARATOR_MARKER.test(line)) {
47
+ frame.stage = "incoming";
48
+ frame.separatorLineIndex = index;
49
+ lineTypes[index] = "marker-separator";
50
+ continue;
51
+ }
52
+ if (END_MARKER.test(line)) {
53
+ const completedFrame = stack.pop();
54
+ lineTypes[index] = "marker-end";
55
+ if (completedFrame?.separatorLineIndex != null) {
56
+ const conflictIndex = regions.length;
57
+ regions.push({
58
+ conflictIndex,
59
+ startLineIndex: completedFrame.startLineIndex,
60
+ startLineNumber: completedFrame.startLineIndex + 1,
61
+ separatorLineIndex: completedFrame.separatorLineIndex,
62
+ separatorLineNumber: completedFrame.separatorLineIndex + 1,
63
+ endLineIndex: index,
64
+ endLineNumber: index + 1,
65
+ baseMarkerLineIndex: completedFrame.baseMarkerLineIndex,
66
+ baseMarkerLineNumber: completedFrame.baseMarkerLineIndex != null ? completedFrame.baseMarkerLineIndex + 1 : void 0
67
+ });
68
+ }
69
+ continue;
70
+ }
71
+ lineTypes[index] = frame.stage;
72
+ }
73
+ return {
74
+ lineTypes,
75
+ regions
76
+ };
77
+ }
78
+
79
+ //#endregion
80
+ export { getMergeConflictActionLineNumber, getMergeConflictLineTypes, getMergeConflictParseResult, getMergeConflictRegions };
81
+ //# sourceMappingURL=getMergeConflictLineTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMergeConflictLineTypes.js","names":["stack: MergeConflictFrame[]","regions: MergeConflictRegion[]"],"sources":["../../src/utils/getMergeConflictLineTypes.ts"],"sourcesContent":["import type { MergeConflictRegion } from '../types';\n\nexport type MergeConflictLineType =\n | 'none'\n | 'marker-start'\n | 'marker-base'\n | 'marker-separator'\n | 'marker-end'\n | 'current'\n | 'base'\n | 'incoming';\n\ntype MergeConflictStage = 'current' | 'base' | 'incoming';\n\ninterface MergeConflictFrame {\n stage: MergeConflictStage;\n startLineIndex: number;\n baseMarkerLineIndex?: number;\n separatorLineIndex?: number;\n}\n\nexport interface MergeConflictParseResult {\n lineTypes: MergeConflictLineType[];\n regions: MergeConflictRegion[];\n}\n\nconst START_MARKER = /^<{7,}(?:\\s.*)?$/;\nconst BASE_MARKER = /^\\|{7,}(?:\\s.*)?$/;\nconst SEPARATOR_MARKER = /^={7,}(?:\\s.*)?$/;\nconst END_MARKER = /^>{7,}(?:\\s.*)?$/;\n\nfunction trimLineEnding(line: string): string {\n return line.replace(/(?:\\r\\n|\\n|\\r)$/, '');\n}\n\nexport function getMergeConflictLineTypes(\n lines: string[]\n): MergeConflictLineType[] {\n return getMergeConflictParseResult(lines).lineTypes;\n}\n\nexport function getMergeConflictRegions(\n lines: string[]\n): MergeConflictRegion[] {\n return getMergeConflictParseResult(lines).regions;\n}\n\nexport function getMergeConflictParseResult(\n lines: string[]\n): MergeConflictParseResult {\n return parseMergeConflicts(lines);\n}\n\nexport function getMergeConflictActionLineNumber(\n conflict: MergeConflictRegion\n): number {\n return Math.max(1, conflict.startLineNumber - 1);\n}\n\nfunction parseMergeConflicts(lines: string[]): MergeConflictParseResult {\n const lineTypes = new Array<MergeConflictLineType>(lines.length);\n const stack: MergeConflictFrame[] = [];\n const regions: MergeConflictRegion[] = [];\n\n for (let index = 0; index < lines.length; index++) {\n const line = trimLineEnding(lines[index]);\n\n if (START_MARKER.test(line)) {\n stack.push({ stage: 'current', startLineIndex: index });\n lineTypes[index] = 'marker-start';\n continue;\n }\n\n const frame = stack.at(-1);\n if (frame == null) {\n lineTypes[index] = 'none';\n continue;\n }\n\n if (BASE_MARKER.test(line)) {\n frame.stage = 'base';\n frame.baseMarkerLineIndex = index;\n lineTypes[index] = 'marker-base';\n continue;\n }\n\n if (SEPARATOR_MARKER.test(line)) {\n frame.stage = 'incoming';\n frame.separatorLineIndex = index;\n lineTypes[index] = 'marker-separator';\n continue;\n }\n\n if (END_MARKER.test(line)) {\n const completedFrame = stack.pop();\n lineTypes[index] = 'marker-end';\n if (completedFrame?.separatorLineIndex != null) {\n const conflictIndex = regions.length;\n regions.push({\n conflictIndex,\n startLineIndex: completedFrame.startLineIndex,\n startLineNumber: completedFrame.startLineIndex + 1,\n separatorLineIndex: completedFrame.separatorLineIndex,\n separatorLineNumber: completedFrame.separatorLineIndex + 1,\n endLineIndex: index,\n endLineNumber: index + 1,\n baseMarkerLineIndex: completedFrame.baseMarkerLineIndex,\n baseMarkerLineNumber:\n completedFrame.baseMarkerLineIndex != null\n ? completedFrame.baseMarkerLineIndex + 1\n : undefined,\n });\n }\n continue;\n }\n\n lineTypes[index] = frame.stage;\n }\n\n return { lineTypes, regions };\n}\n"],"mappings":";AA0BA,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,mBAAmB;AACzB,MAAM,aAAa;AAEnB,SAAS,eAAe,MAAsB;AAC5C,QAAO,KAAK,QAAQ,mBAAmB,GAAG;;AAG5C,SAAgB,0BACd,OACyB;AACzB,QAAO,4BAA4B,MAAM,CAAC;;AAG5C,SAAgB,wBACd,OACuB;AACvB,QAAO,4BAA4B,MAAM,CAAC;;AAG5C,SAAgB,4BACd,OAC0B;AAC1B,QAAO,oBAAoB,MAAM;;AAGnC,SAAgB,iCACd,UACQ;AACR,QAAO,KAAK,IAAI,GAAG,SAAS,kBAAkB,EAAE;;AAGlD,SAAS,oBAAoB,OAA2C;CACtE,MAAM,YAAY,IAAI,MAA6B,MAAM,OAAO;CAChE,MAAMA,QAA8B,EAAE;CACtC,MAAMC,UAAiC,EAAE;AAEzC,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EACjD,MAAM,OAAO,eAAe,MAAM,OAAO;AAEzC,MAAI,aAAa,KAAK,KAAK,EAAE;AAC3B,SAAM,KAAK;IAAE,OAAO;IAAW,gBAAgB;IAAO,CAAC;AACvD,aAAU,SAAS;AACnB;;EAGF,MAAM,QAAQ,MAAM,GAAG,GAAG;AAC1B,MAAI,SAAS,MAAM;AACjB,aAAU,SAAS;AACnB;;AAGF,MAAI,YAAY,KAAK,KAAK,EAAE;AAC1B,SAAM,QAAQ;AACd,SAAM,sBAAsB;AAC5B,aAAU,SAAS;AACnB;;AAGF,MAAI,iBAAiB,KAAK,KAAK,EAAE;AAC/B,SAAM,QAAQ;AACd,SAAM,qBAAqB;AAC3B,aAAU,SAAS;AACnB;;AAGF,MAAI,WAAW,KAAK,KAAK,EAAE;GACzB,MAAM,iBAAiB,MAAM,KAAK;AAClC,aAAU,SAAS;AACnB,OAAI,gBAAgB,sBAAsB,MAAM;IAC9C,MAAM,gBAAgB,QAAQ;AAC9B,YAAQ,KAAK;KACX;KACA,gBAAgB,eAAe;KAC/B,iBAAiB,eAAe,iBAAiB;KACjD,oBAAoB,eAAe;KACnC,qBAAqB,eAAe,qBAAqB;KACzD,cAAc;KACd,eAAe,QAAQ;KACvB,qBAAqB,eAAe;KACpC,sBACE,eAAe,uBAAuB,OAClC,eAAe,sBAAsB,IACrC;KACP,CAAC;;AAEJ;;AAGF,YAAU,SAAS,MAAM;;AAG3B,QAAO;EAAE;EAAW;EAAS"}
@@ -4,12 +4,14 @@ interface CreateCodeNodeProps {
4
4
  code?: HTMLElement;
5
5
  columnType?: 'additions' | 'deletions' | 'unified';
6
6
  rowSpan?: number;
7
+ containerSize?: boolean;
7
8
  }
8
9
  declare function getOrCreateCodeNode({
9
10
  code,
10
11
  pre,
11
12
  columnType,
12
- rowSpan
13
+ rowSpan,
14
+ containerSize
13
15
  }?: CreateCodeNodeProps): HTMLElement;
14
16
  //#endregion
15
17
  export { getOrCreateCodeNode };
@@ -1 +1 @@
1
- {"version":3,"file":"getOrCreateCodeNode.d.ts","names":["CreateCodeNodeProps","HTMLPreElement","HTMLElement","getOrCreateCodeNode","code","pre","columnType","rowSpan"],"sources":["../../src/utils/getOrCreateCodeNode.d.ts"],"sourcesContent":["interface CreateCodeNodeProps {\n pre?: HTMLPreElement;\n code?: HTMLElement;\n columnType?: 'additions' | 'deletions' | 'unified';\n rowSpan?: number;\n}\nexport declare function getOrCreateCodeNode({ code, pre, columnType, rowSpan }?: CreateCodeNodeProps): HTMLElement;\nexport {};\n//# sourceMappingURL=getOrCreateCodeNode.d.ts.map"],"mappings":";UAAUA,mBAAAA;EAAAA,GAAAA,CAAAA,EACAC,cADAD;EAMcG,IAAAA,CAAAA,EAJbD,WAIaC;EAAsBC,UAAAA,CAAAA,EAAAA,WAAAA,GAAAA,WAAAA,GAAAA,SAAAA;EAAMC,OAAAA,CAAAA,EAAAA,MAAAA;;AAAiBE,iBAA7CJ,mBAAAA,CAA6CI;EAAAA,IAAAA;EAAAA,GAAAA;EAAAA,UAAAA;EAAAA;AAAAA,CAAAA,CAAAA,EAAYP,mBAAZO,CAAAA,EAAkCL,WAAlCK"}
1
+ {"version":3,"file":"getOrCreateCodeNode.d.ts","names":["CreateCodeNodeProps","HTMLPreElement","HTMLElement","getOrCreateCodeNode","code","pre","columnType","rowSpan","containerSize"],"sources":["../../src/utils/getOrCreateCodeNode.d.ts"],"sourcesContent":["interface CreateCodeNodeProps {\n pre?: HTMLPreElement;\n code?: HTMLElement;\n columnType?: 'additions' | 'deletions' | 'unified';\n rowSpan?: number;\n containerSize?: boolean;\n}\nexport declare function getOrCreateCodeNode({ code, pre, columnType, rowSpan, containerSize }?: CreateCodeNodeProps): HTMLElement;\nexport {};\n//# sourceMappingURL=getOrCreateCodeNode.d.ts.map"],"mappings":";UAAUA,mBAAAA;EAAAA,GAAAA,CAAAA,EACAC,cADAD;EAOcG,IAAAA,CAAAA,EALbD,WAKaC;EAAsBC,UAAAA,CAAAA,EAAAA,WAAAA,GAAAA,WAAAA,GAAAA,SAAAA;EAAMC,OAAAA,CAAAA,EAAAA,MAAAA;EAAKC,aAAAA,CAAAA,EAAAA,OAAAA;;AAAqBE,iBAAtDL,mBAAAA,CAAsDK;EAAAA,IAAAA;EAAAA,GAAAA;EAAAA,UAAAA;EAAAA,OAAAA;EAAAA;AAAAA,CAAAA,CAAAA,EAAkBR,mBAAlBQ,CAAAA,EAAwCN,WAAxCM"}
@@ -1,13 +1,15 @@
1
1
  //#region src/utils/getOrCreateCodeNode.ts
2
- function getOrCreateCodeNode({ code, pre, columnType, rowSpan } = {}) {
2
+ function getOrCreateCodeNode({ code, pre, columnType, rowSpan, containerSize = false } = {}) {
3
3
  if (code == null) {
4
4
  code = document.createElement("code");
5
- code.dataset.code = "";
6
- if (columnType != null) code.dataset[columnType] = "";
5
+ code.setAttribute("data-code", "");
6
+ if (columnType != null) code.setAttribute(`data-${columnType}`, "");
7
7
  pre?.appendChild(code);
8
8
  }
9
9
  if (rowSpan != null) code.style.setProperty("grid-row", `span ${rowSpan}`);
10
10
  else code.style.removeProperty("grid-row");
11
+ if (containerSize) code.setAttribute("data-container-size", "");
12
+ else code.removeAttribute("data-container-size");
11
13
  return code;
12
14
  }
13
15
 
@@ -1 +1 @@
1
- {"version":3,"file":"getOrCreateCodeNode.js","names":[],"sources":["../../src/utils/getOrCreateCodeNode.ts"],"sourcesContent":["interface CreateCodeNodeProps {\n pre?: HTMLPreElement;\n code?: HTMLElement;\n columnType?: 'additions' | 'deletions' | 'unified';\n rowSpan?: number;\n}\n\nexport function getOrCreateCodeNode({\n code,\n pre,\n columnType,\n rowSpan,\n}: CreateCodeNodeProps = {}): HTMLElement {\n if (code == null) {\n code = document.createElement('code');\n code.dataset.code = '';\n if (columnType != null) {\n code.dataset[columnType] = '';\n }\n pre?.appendChild(code);\n }\n if (rowSpan != null) {\n code.style.setProperty('grid-row', `span ${rowSpan}`);\n } else {\n code.style.removeProperty('grid-row');\n }\n return code;\n}\n"],"mappings":";AAOA,SAAgB,oBAAoB,EAClC,MACA,KACA,YACA,YACuB,EAAE,EAAe;AACxC,KAAI,QAAQ,MAAM;AAChB,SAAO,SAAS,cAAc,OAAO;AACrC,OAAK,QAAQ,OAAO;AACpB,MAAI,cAAc,KAChB,MAAK,QAAQ,cAAc;AAE7B,OAAK,YAAY,KAAK;;AAExB,KAAI,WAAW,KACb,MAAK,MAAM,YAAY,YAAY,QAAQ,UAAU;KAErD,MAAK,MAAM,eAAe,WAAW;AAEvC,QAAO"}
1
+ {"version":3,"file":"getOrCreateCodeNode.js","names":[],"sources":["../../src/utils/getOrCreateCodeNode.ts"],"sourcesContent":["interface CreateCodeNodeProps {\n pre?: HTMLPreElement;\n code?: HTMLElement;\n columnType?: 'additions' | 'deletions' | 'unified';\n rowSpan?: number;\n containerSize?: boolean;\n}\n\nexport function getOrCreateCodeNode({\n code,\n pre,\n columnType,\n rowSpan,\n containerSize = false,\n}: CreateCodeNodeProps = {}): HTMLElement {\n if (code == null) {\n code = document.createElement('code');\n code.setAttribute('data-code', '');\n if (columnType != null) {\n code.setAttribute(`data-${columnType}`, '');\n }\n pre?.appendChild(code);\n }\n if (rowSpan != null) {\n code.style.setProperty('grid-row', `span ${rowSpan}`);\n } else {\n code.style.removeProperty('grid-row');\n }\n if (containerSize) {\n code.setAttribute('data-container-size', '');\n } else {\n code.removeAttribute('data-container-size');\n }\n return code;\n}\n"],"mappings":";AAQA,SAAgB,oBAAoB,EAClC,MACA,KACA,YACA,SACA,gBAAgB,UACO,EAAE,EAAe;AACxC,KAAI,QAAQ,MAAM;AAChB,SAAO,SAAS,cAAc,OAAO;AACrC,OAAK,aAAa,aAAa,GAAG;AAClC,MAAI,cAAc,KAChB,MAAK,aAAa,QAAQ,cAAc,GAAG;AAE7C,OAAK,YAAY,KAAK;;AAExB,KAAI,WAAW,KACb,MAAK,MAAM,YAAY,YAAY,QAAQ,UAAU;KAErD,MAAK,MAAM,eAAe,WAAW;AAEvC,KAAI,cACF,MAAK,aAAa,uBAAuB,GAAG;KAE5C,MAAK,gBAAgB,sBAAsB;AAE7C,QAAO"}
@@ -5,7 +5,7 @@ import { Element, ElementContent, Properties, Root, Text } from "hast";
5
5
  //#region src/utils/hast_utils.d.ts
6
6
  declare function createTextNodeElement(value: string): Text;
7
7
  interface CreateHastElementProps {
8
- tagName: 'span' | 'div' | 'code' | 'pre' | 'slot' | 'svg' | 'use' | 'style' | 'template';
8
+ tagName: 'span' | 'div' | 'button' | 'code' | 'pre' | 'slot' | 'svg' | 'use' | 'style' | 'template';
9
9
  children?: ElementContent[];
10
10
  properties?: Properties;
11
11
  }
@@ -28,7 +28,7 @@ declare function createIconElement({
28
28
  }: CreateIconProps): Element;
29
29
  declare function findCodeElement(nodes: Root | Element): Element | undefined;
30
30
  declare function createGutterWrapper(children?: ElementContent[]): Element;
31
- declare function createGutterItem(lineType: LineTypes | 'buffer' | 'separator' | 'annotation', lineNumber: number, lineIndex: string): Element;
31
+ declare function createGutterItem(lineType: LineTypes | 'buffer' | 'separator' | 'annotation', lineNumber: number, lineIndex: string, properties?: Properties): Element;
32
32
  declare function createGutterGap(type: LineTypes | undefined, bufferType: 'annotation' | 'buffer' | 'metadata', size: number): Element;
33
33
  //#endregion
34
34
  export { createGutterGap, createGutterItem, createGutterWrapper, createHastElement, createIconElement, createTextNodeElement, findCodeElement };
@@ -1 +1 @@
1
- {"version":3,"file":"hast_utils.d.ts","names":["ElementContent","Element","HASTElement","Properties","Root","Text","SVGSpriteNames","LineTypes","createTextNodeElement","CreateHastElementProps","createHastElement","tagName","children","properties","CreateIconProps","createIconElement","name","width","height","findCodeElement","createGutterWrapper","createGutterItem","createGutterGap"],"sources":["../../src/utils/hast_utils.d.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement, Properties, Root, Text } from 'hast';\nimport type { SVGSpriteNames } from '../sprite';\nimport type { LineTypes } from '../types';\nexport declare function createTextNodeElement(value: string): Text;\ninterface CreateHastElementProps {\n tagName: 'span' | 'div' | 'code' | 'pre' | 'slot' | 'svg' | 'use' | 'style' | 'template';\n children?: ElementContent[];\n properties?: Properties;\n}\nexport declare function createHastElement({ tagName, children, properties }: CreateHastElementProps): HASTElement;\ninterface CreateIconProps {\n name: SVGSpriteNames;\n width?: number;\n height?: number;\n properties?: Properties;\n}\nexport declare function createIconElement({ name, width, height, properties }: CreateIconProps): HASTElement;\nexport declare function findCodeElement(nodes: Root | HASTElement): HASTElement | undefined;\nexport declare function createGutterWrapper(children?: ElementContent[]): HASTElement;\nexport declare function createGutterItem(lineType: LineTypes | 'buffer' | 'separator' | 'annotation', lineNumber: number, lineIndex: string): HASTElement;\nexport declare function createGutterGap(type: LineTypes | undefined, bufferType: 'annotation' | 'buffer' | 'metadata', size: number): HASTElement;\nexport {};\n//# sourceMappingURL=hast_utils.d.ts.map"],"mappings":";;;;;iBAGwBQ,qBAAAA,iBAAsCH;UACpDI,sBAAAA;EADcD,OAAAA,EAAAA,MAAAA,GAAAA,KAAAA,GAAqB,MAAA,GAAA,KAAiBH,GAAI,MAAA,GAAA,KAAA,GAAA,KAAA,GAAA,OAAA,GAAA,UAAA;EACxDI,QAAAA,CAAAA,EAEKT,cAFiB,EAAA;EAKRU,UAAAA,CAAAA,EAFPP,UAEwB;;AAAYS,iBAA7BF,iBAAAA,CAA6BE;EAAAA,OAAAA;EAAAA,QAAAA;EAAAA;AAAAA,CAAAA,EAAwBH,sBAAxBG,CAAAA,EAAiDV,OAAjDU;UAC3CE,eAAAA,CADqDD;EAAcJ,IAAAA,EAEnEH,cAFmEG;EAAyBP,KAAAA,CAAAA,EAAAA,MAAAA;EAAW,MAAA,CAAA,EAAA,MAAA;EACvGY,UAAAA,CAAAA,EAIOX,UAJQ;AAMzB;AAA4Ca,iBAApBD,iBAAAA,CAAoBC;EAAAA,IAAAA;EAAAA,KAAAA;EAAAA,MAAAA;EAAAA;AAAAA,CAAAA,EAAmCF,eAAnCE,CAAAA,EAAqDd,OAArDc;AAAMC,iBAC1BE,eAAAA,CAD0BF,KAAAA,EACHb,IADGa,GACIf,OADJe,CAAAA,EACkBf,OADlBe,GAAAA,SAAAA;AAAOC,iBAEjCE,mBAAAA,CAFiCF,QAAAA,CAAAA,EAEFlB,cAFEkB,EAAAA,CAAAA,EAEiBhB,OAFjBgB;AAAQL,iBAGzCQ,gBAAAA,CAHyCR,QAAAA,EAGdN,SAHcM,GAAAA,QAAAA,GAAAA,WAAAA,GAAAA,YAAAA,EAAAA,UAAAA,EAAAA,MAAAA,EAAAA,SAAAA,EAAAA,MAAAA,CAAAA,EAG6EX,OAH7EW;AAAcC,iBAIvDQ,eAAAA,CAJuDR,IAAAA,EAIjCP,SAJiCO,GAAAA,SAAAA,EAAAA,UAAAA,EAAAA,YAAAA,GAAAA,QAAAA,GAAAA,UAAAA,EAAAA,IAAAA,EAAAA,MAAAA,CAAAA,EAIuDZ,OAJvDY"}
1
+ {"version":3,"file":"hast_utils.d.ts","names":["ElementContent","Element","HASTElement","Properties","Root","Text","SVGSpriteNames","LineTypes","createTextNodeElement","CreateHastElementProps","createHastElement","tagName","children","properties","CreateIconProps","createIconElement","name","width","height","findCodeElement","createGutterWrapper","createGutterItem","createGutterGap"],"sources":["../../src/utils/hast_utils.d.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement, Properties, Root, Text } from 'hast';\nimport type { SVGSpriteNames } from '../sprite';\nimport type { LineTypes } from '../types';\nexport declare function createTextNodeElement(value: string): Text;\ninterface CreateHastElementProps {\n tagName: 'span' | 'div' | 'button' | 'code' | 'pre' | 'slot' | 'svg' | 'use' | 'style' | 'template';\n children?: ElementContent[];\n properties?: Properties;\n}\nexport declare function createHastElement({ tagName, children, properties }: CreateHastElementProps): HASTElement;\ninterface CreateIconProps {\n name: SVGSpriteNames;\n width?: number;\n height?: number;\n properties?: Properties;\n}\nexport declare function createIconElement({ name, width, height, properties }: CreateIconProps): HASTElement;\nexport declare function findCodeElement(nodes: Root | HASTElement): HASTElement | undefined;\nexport declare function createGutterWrapper(children?: ElementContent[]): HASTElement;\nexport declare function createGutterItem(lineType: LineTypes | 'buffer' | 'separator' | 'annotation', lineNumber: number, lineIndex: string, properties?: Properties): HASTElement;\nexport declare function createGutterGap(type: LineTypes | undefined, bufferType: 'annotation' | 'buffer' | 'metadata', size: number): HASTElement;\nexport {};\n//# sourceMappingURL=hast_utils.d.ts.map"],"mappings":";;;;;iBAGwBQ,qBAAAA,iBAAsCH;UACpDI,sBAAAA;EADcD,OAAAA,EAAAA,MAAAA,GAAAA,KAAAA,GAAqB,QAAA,GAAiBH,MAAI,GAAA,KAAA,GAAA,MAAA,GAAA,KAAA,GAAA,KAAA,GAAA,OAAA,GAAA,UAAA;EACxDI,QAAAA,CAAAA,EAEKT,cAFiB,EAAA;EAKRU,UAAAA,CAAAA,EAFPP,UAEwB;;AAAYS,iBAA7BF,iBAAAA,CAA6BE;EAAAA,OAAAA;EAAAA,QAAAA;EAAAA;AAAAA,CAAAA,EAAwBH,sBAAxBG,CAAAA,EAAiDV,OAAjDU;UAC3CE,eAAAA,CADqDD;EAAcJ,IAAAA,EAEnEH,cAFmEG;EAAyBP,KAAAA,CAAAA,EAAAA,MAAAA;EAAW,MAAA,CAAA,EAAA,MAAA;EACvGY,UAAAA,CAAAA,EAIOX,UAJQ;AAMzB;AAA4Ca,iBAApBD,iBAAAA,CAAoBC;EAAAA,IAAAA;EAAAA,KAAAA;EAAAA,MAAAA;EAAAA;AAAAA,CAAAA,EAAmCF,eAAnCE,CAAAA,EAAqDd,OAArDc;AAAMC,iBAC1BE,eAAAA,CAD0BF,KAAAA,EACHb,IADGa,GACIf,OADJe,CAAAA,EACkBf,OADlBe,GAAAA,SAAAA;AAAOC,iBAEjCE,mBAAAA,CAFiCF,QAAAA,CAAAA,EAEFlB,cAFEkB,EAAAA,CAAAA,EAEiBhB,OAFjBgB;AAAQL,iBAGzCQ,gBAAAA,CAHyCR,QAAAA,EAGdN,SAHcM,GAAAA,QAAAA,GAAAA,WAAAA,GAAAA,YAAAA,EAAAA,UAAAA,EAAAA,MAAAA,EAAAA,SAAAA,EAAAA,MAAAA,EAAAA,UAAAA,CAAAA,EAGyFV,UAHzFU,CAAAA,EAGsGX,OAHtGW;AAAcC,iBAIvDQ,eAAAA,CAJuDR,IAAAA,EAIjCP,SAJiCO,GAAAA,SAAAA,EAAAA,UAAAA,EAAAA,YAAAA,GAAAA,QAAAA,GAAAA,UAAAA,EAAAA,IAAAA,EAAAA,MAAAA,CAAAA,EAIuDZ,OAJvDY"}
@@ -43,13 +43,14 @@ function createGutterWrapper(children) {
43
43
  children
44
44
  });
45
45
  }
46
- function createGutterItem(lineType, lineNumber, lineIndex) {
46
+ function createGutterItem(lineType, lineNumber, lineIndex, properties = {}) {
47
47
  return createHastElement({
48
48
  tagName: "div",
49
49
  properties: {
50
50
  "data-line-type": lineType,
51
51
  "data-column-number": lineNumber,
52
- "data-line-index": lineIndex
52
+ "data-line-index": lineIndex,
53
+ ...properties
53
54
  },
54
55
  children: lineNumber != null ? [createHastElement({
55
56
  tagName: "span",
@@ -1 +1 @@
1
- {"version":3,"file":"hast_utils.js","names":["firstChild: RootContent | HASTElement | Root | null"],"sources":["../../src/utils/hast_utils.ts"],"sourcesContent":["import type {\n ElementContent,\n Element as HASTElement,\n Properties,\n Root,\n RootContent,\n Text,\n} from 'hast';\n\nimport type { SVGSpriteNames } from '../sprite';\nimport type { LineTypes } from '../types';\n\nexport function createTextNodeElement(value: string): Text {\n return { type: 'text', value };\n}\n\ninterface CreateHastElementProps {\n tagName:\n | 'span'\n | 'div'\n | 'code'\n | 'pre'\n | 'slot'\n | 'svg'\n | 'use'\n | 'style'\n | 'template';\n children?: ElementContent[];\n properties?: Properties;\n}\n\nexport function createHastElement({\n tagName,\n children = [],\n properties = {},\n}: CreateHastElementProps): HASTElement {\n return {\n type: 'element',\n tagName,\n properties,\n children,\n };\n}\n\ninterface CreateIconProps {\n name: SVGSpriteNames;\n width?: number;\n height?: number;\n properties?: Properties;\n}\n\nexport function createIconElement({\n name,\n width = 16,\n height = 16,\n properties,\n}: CreateIconProps): HASTElement {\n return createHastElement({\n tagName: 'svg',\n properties: { width, height, viewBox: '0 0 16 16', ...properties },\n children: [\n createHastElement({\n tagName: 'use',\n properties: { href: `#${name.replace(/^#/, '')}` },\n }),\n ],\n });\n}\n\nexport function findCodeElement(\n nodes: Root | HASTElement\n): HASTElement | undefined {\n let firstChild: RootContent | HASTElement | Root | null = nodes.children[0];\n while (firstChild != null) {\n if (firstChild.type === 'element' && firstChild.tagName === 'code') {\n return firstChild;\n }\n if ('children' in firstChild) {\n firstChild = firstChild.children[0];\n } else {\n firstChild = null;\n }\n }\n return undefined;\n}\n\nexport function createGutterWrapper(children?: ElementContent[]): HASTElement {\n return createHastElement({\n tagName: 'div',\n properties: { 'data-gutter': '' },\n children,\n });\n}\n\nexport function createGutterItem(\n lineType: LineTypes | 'buffer' | 'separator' | 'annotation',\n lineNumber: number,\n lineIndex: string\n): HASTElement {\n return createHastElement({\n tagName: 'div',\n properties: {\n 'data-line-type': lineType,\n 'data-column-number': lineNumber,\n 'data-line-index': lineIndex,\n },\n children:\n lineNumber != null\n ? [\n createHastElement({\n tagName: 'span',\n properties: { 'data-line-number-content': '' },\n children: [createTextNodeElement(`${lineNumber}`)],\n }),\n ]\n : undefined,\n });\n}\n\nexport function createGutterGap(\n type: LineTypes | undefined,\n bufferType: 'annotation' | 'buffer' | 'metadata',\n size: number\n): HASTElement {\n return createHastElement({\n tagName: 'div',\n properties: {\n 'data-gutter-buffer': bufferType,\n 'data-buffer-size': size,\n 'data-line-type': bufferType === 'annotation' ? undefined : type,\n style:\n bufferType === 'annotation'\n ? `grid-row: span ${size};`\n : `grid-row: span ${size};min-height:calc(${size} * 1lh);`,\n },\n });\n}\n"],"mappings":";AAYA,SAAgB,sBAAsB,OAAqB;AACzD,QAAO;EAAE,MAAM;EAAQ;EAAO;;AAkBhC,SAAgB,kBAAkB,EAChC,SACA,WAAW,EAAE,EACb,aAAa,EAAE,IACuB;AACtC,QAAO;EACL,MAAM;EACN;EACA;EACA;EACD;;AAUH,SAAgB,kBAAkB,EAChC,MACA,QAAQ,IACR,SAAS,IACT,cAC+B;AAC/B,QAAO,kBAAkB;EACvB,SAAS;EACT,YAAY;GAAE;GAAO;GAAQ,SAAS;GAAa,GAAG;GAAY;EAClE,UAAU,CACR,kBAAkB;GAChB,SAAS;GACT,YAAY,EAAE,MAAM,IAAI,KAAK,QAAQ,MAAM,GAAG,IAAI;GACnD,CAAC,CACH;EACF,CAAC;;AAGJ,SAAgB,gBACd,OACyB;CACzB,IAAIA,aAAsD,MAAM,SAAS;AACzE,QAAO,cAAc,MAAM;AACzB,MAAI,WAAW,SAAS,aAAa,WAAW,YAAY,OAC1D,QAAO;AAET,MAAI,cAAc,WAChB,cAAa,WAAW,SAAS;MAEjC,cAAa;;;AAMnB,SAAgB,oBAAoB,UAA0C;AAC5E,QAAO,kBAAkB;EACvB,SAAS;EACT,YAAY,EAAE,eAAe,IAAI;EACjC;EACD,CAAC;;AAGJ,SAAgB,iBACd,UACA,YACA,WACa;AACb,QAAO,kBAAkB;EACvB,SAAS;EACT,YAAY;GACV,kBAAkB;GAClB,sBAAsB;GACtB,mBAAmB;GACpB;EACD,UACE,cAAc,OACV,CACE,kBAAkB;GAChB,SAAS;GACT,YAAY,EAAE,4BAA4B,IAAI;GAC9C,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;GACnD,CAAC,CACH,GACD;EACP,CAAC;;AAGJ,SAAgB,gBACd,MACA,YACA,MACa;AACb,QAAO,kBAAkB;EACvB,SAAS;EACT,YAAY;GACV,sBAAsB;GACtB,oBAAoB;GACpB,kBAAkB,eAAe,eAAe,SAAY;GAC5D,OACE,eAAe,eACX,kBAAkB,KAAK,KACvB,kBAAkB,KAAK,mBAAmB,KAAK;GACtD;EACF,CAAC"}
1
+ {"version":3,"file":"hast_utils.js","names":["firstChild: RootContent | HASTElement | Root | null"],"sources":["../../src/utils/hast_utils.ts"],"sourcesContent":["import type {\n ElementContent,\n Element as HASTElement,\n Properties,\n Root,\n RootContent,\n Text,\n} from 'hast';\n\nimport type { SVGSpriteNames } from '../sprite';\nimport type { LineTypes } from '../types';\n\nexport function createTextNodeElement(value: string): Text {\n return { type: 'text', value };\n}\n\ninterface CreateHastElementProps {\n tagName:\n | 'span'\n | 'div'\n | 'button'\n | 'code'\n | 'pre'\n | 'slot'\n | 'svg'\n | 'use'\n | 'style'\n | 'template';\n children?: ElementContent[];\n properties?: Properties;\n}\n\nexport function createHastElement({\n tagName,\n children = [],\n properties = {},\n}: CreateHastElementProps): HASTElement {\n return {\n type: 'element',\n tagName,\n properties,\n children,\n };\n}\n\ninterface CreateIconProps {\n name: SVGSpriteNames;\n width?: number;\n height?: number;\n properties?: Properties;\n}\n\nexport function createIconElement({\n name,\n width = 16,\n height = 16,\n properties,\n}: CreateIconProps): HASTElement {\n return createHastElement({\n tagName: 'svg',\n properties: { width, height, viewBox: '0 0 16 16', ...properties },\n children: [\n createHastElement({\n tagName: 'use',\n properties: { href: `#${name.replace(/^#/, '')}` },\n }),\n ],\n });\n}\n\nexport function findCodeElement(\n nodes: Root | HASTElement\n): HASTElement | undefined {\n let firstChild: RootContent | HASTElement | Root | null = nodes.children[0];\n while (firstChild != null) {\n if (firstChild.type === 'element' && firstChild.tagName === 'code') {\n return firstChild;\n }\n if ('children' in firstChild) {\n firstChild = firstChild.children[0];\n } else {\n firstChild = null;\n }\n }\n return undefined;\n}\n\nexport function createGutterWrapper(children?: ElementContent[]): HASTElement {\n return createHastElement({\n tagName: 'div',\n properties: { 'data-gutter': '' },\n children,\n });\n}\n\nexport function createGutterItem(\n lineType: LineTypes | 'buffer' | 'separator' | 'annotation',\n lineNumber: number,\n lineIndex: string,\n properties: Properties = {}\n): HASTElement {\n return createHastElement({\n tagName: 'div',\n properties: {\n 'data-line-type': lineType,\n 'data-column-number': lineNumber,\n 'data-line-index': lineIndex,\n ...properties,\n },\n children:\n lineNumber != null\n ? [\n createHastElement({\n tagName: 'span',\n properties: { 'data-line-number-content': '' },\n children: [createTextNodeElement(`${lineNumber}`)],\n }),\n ]\n : undefined,\n });\n}\n\nexport function createGutterGap(\n type: LineTypes | undefined,\n bufferType: 'annotation' | 'buffer' | 'metadata',\n size: number\n): HASTElement {\n return createHastElement({\n tagName: 'div',\n properties: {\n 'data-gutter-buffer': bufferType,\n 'data-buffer-size': size,\n 'data-line-type': bufferType === 'annotation' ? undefined : type,\n style:\n bufferType === 'annotation'\n ? `grid-row: span ${size};`\n : `grid-row: span ${size};min-height:calc(${size} * 1lh);`,\n },\n });\n}\n"],"mappings":";AAYA,SAAgB,sBAAsB,OAAqB;AACzD,QAAO;EAAE,MAAM;EAAQ;EAAO;;AAmBhC,SAAgB,kBAAkB,EAChC,SACA,WAAW,EAAE,EACb,aAAa,EAAE,IACuB;AACtC,QAAO;EACL,MAAM;EACN;EACA;EACA;EACD;;AAUH,SAAgB,kBAAkB,EAChC,MACA,QAAQ,IACR,SAAS,IACT,cAC+B;AAC/B,QAAO,kBAAkB;EACvB,SAAS;EACT,YAAY;GAAE;GAAO;GAAQ,SAAS;GAAa,GAAG;GAAY;EAClE,UAAU,CACR,kBAAkB;GAChB,SAAS;GACT,YAAY,EAAE,MAAM,IAAI,KAAK,QAAQ,MAAM,GAAG,IAAI;GACnD,CAAC,CACH;EACF,CAAC;;AAGJ,SAAgB,gBACd,OACyB;CACzB,IAAIA,aAAsD,MAAM,SAAS;AACzE,QAAO,cAAc,MAAM;AACzB,MAAI,WAAW,SAAS,aAAa,WAAW,YAAY,OAC1D,QAAO;AAET,MAAI,cAAc,WAChB,cAAa,WAAW,SAAS;MAEjC,cAAa;;;AAMnB,SAAgB,oBAAoB,UAA0C;AAC5E,QAAO,kBAAkB;EACvB,SAAS;EACT,YAAY,EAAE,eAAe,IAAI;EACjC;EACD,CAAC;;AAGJ,SAAgB,iBACd,UACA,YACA,WACA,aAAyB,EAAE,EACd;AACb,QAAO,kBAAkB;EACvB,SAAS;EACT,YAAY;GACV,kBAAkB;GAClB,sBAAsB;GACtB,mBAAmB;GACnB,GAAG;GACJ;EACD,UACE,cAAc,OACV,CACE,kBAAkB;GAChB,SAAS;GACT,YAAY,EAAE,4BAA4B,IAAI;GAC9C,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;GACnD,CAAC,CACH,GACD;EACP,CAAC;;AAGJ,SAAgB,gBACd,MACA,YACA,MACa;AACb,QAAO,kBAAkB;EACvB,SAAS;EACT,YAAY;GACV,sBAAsB;GACtB,oBAAoB;GACpB,kBAAkB,eAAe,eAAe,SAAY;GAC5D,OACE,eAAe,eACX,kBAAkB,KAAK,KACvB,kBAAkB,KAAK,mBAAmB,KAAK;GACtD;EACF,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { FileContents, FileDiffMetadata, MergeConflictRegion } from "../types.js";
2
+
3
+ //#region src/utils/parseMergeConflictDiffFromFile.d.ts
4
+ interface ParseMergeConflictDiffFromFileResult {
5
+ fileDiff: FileDiffMetadata;
6
+ currentFile: FileContents;
7
+ incomingFile: FileContents;
8
+ actions: MergeConflictDiffAction[];
9
+ }
10
+ interface MergeConflictDiffAction {
11
+ actionOriginalLineIndex: number;
12
+ actionOriginalLineNumber: number;
13
+ currentLineNumber: number | undefined;
14
+ incomingLineNumber: number | undefined;
15
+ conflict: MergeConflictRegion;
16
+ conflictIndex: number;
17
+ }
18
+ interface GetMergeConflictActionAnchorReturn {
19
+ side: 'additions' | 'deletions';
20
+ lineNumber: number;
21
+ }
22
+ declare function getMergeConflictActionAnchor(action: MergeConflictDiffAction): GetMergeConflictActionAnchorReturn | undefined;
23
+ declare function parseMergeConflictDiffFromFile(file: FileContents): ParseMergeConflictDiffFromFileResult;
24
+ //#endregion
25
+ export { MergeConflictDiffAction, ParseMergeConflictDiffFromFileResult, getMergeConflictActionAnchor, parseMergeConflictDiffFromFile };
26
+ //# sourceMappingURL=parseMergeConflictDiffFromFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseMergeConflictDiffFromFile.d.ts","names":["FileContents","FileDiffMetadata","MergeConflictRegion","ParseMergeConflictDiffFromFileResult","MergeConflictDiffAction","GetMergeConflictActionAnchorReturn","getMergeConflictActionAnchor","parseMergeConflictDiffFromFile"],"sources":["../../src/utils/parseMergeConflictDiffFromFile.d.ts"],"sourcesContent":["import type { FileContents, FileDiffMetadata, MergeConflictRegion } from '../types';\nexport interface ParseMergeConflictDiffFromFileResult {\n fileDiff: FileDiffMetadata;\n currentFile: FileContents;\n incomingFile: FileContents;\n actions: MergeConflictDiffAction[];\n}\nexport interface MergeConflictDiffAction {\n actionOriginalLineIndex: number;\n actionOriginalLineNumber: number;\n currentLineNumber: number | undefined;\n incomingLineNumber: number | undefined;\n conflict: MergeConflictRegion;\n conflictIndex: number;\n}\ninterface GetMergeConflictActionAnchorReturn {\n side: 'additions' | 'deletions';\n lineNumber: number;\n}\nexport declare function getMergeConflictActionAnchor(action: MergeConflictDiffAction): GetMergeConflictActionAnchorReturn | undefined;\nexport declare function parseMergeConflictDiffFromFile(file: FileContents): ParseMergeConflictDiffFromFileResult;\nexport {};\n//# sourceMappingURL=parseMergeConflictDiffFromFile.d.ts.map"],"mappings":";;;UACiBG,oCAAAA;YACHF;EADGE,WAAAA,EAEAH,YAFAG;EACHF,YAAAA,EAEID,YAFJC;EACGD,OAAAA,EAEJI,uBAFIJ,EAAAA;;AAEJI,UAEIA,uBAAAA,CAFJA;EAAuB,uBAAA,EAAA,MAAA;EAEnBA,wBAAAA,EAAuB,MAAA;EAQ9BC,iBAAAA,EAAAA,MAAAA,GAAAA,SAAkC;EAIpBC,kBAAAA,EAAAA,MAAAA,GAAAA,SAA4B;EAC5BC,QAAAA,EARVL,mBAQUK;;;UALdF,kCAAAA;;;;iBAIcC,4BAAAA,SAAqCF,0BAA0BC;iBAC/DE,8BAAAA,OAAqCP,eAAeG"}
@@ -0,0 +1,143 @@
1
+ import { splitFileContents } from "./splitFileContents.js";
2
+ import { processFile } from "./parsePatchFiles.js";
3
+ import { getMergeConflictActionLineNumber, getMergeConflictParseResult } from "./getMergeConflictLineTypes.js";
4
+
5
+ //#region src/utils/parseMergeConflictDiffFromFile.ts
6
+ function getMergeConflictActionAnchor(action) {
7
+ if (action.incomingLineNumber != null) return {
8
+ side: "additions",
9
+ lineNumber: action.incomingLineNumber
10
+ };
11
+ if (action.currentLineNumber != null) return {
12
+ side: "deletions",
13
+ lineNumber: action.currentLineNumber
14
+ };
15
+ }
16
+ function parseMergeConflictDiffFromFile(file) {
17
+ const lines = splitFileContents(file.contents);
18
+ const { lineTypes, regions } = getMergeConflictParseResult(lines);
19
+ const currentContentChunks = [];
20
+ const incomingContentChunks = [];
21
+ const patchContentChunks = [];
22
+ const actions = new Array(regions.length);
23
+ const actionOriginalLineNumbersByRegion = new Array(regions.length);
24
+ const actionOriginalLineIndexesByRegion = new Array(regions.length);
25
+ const actionLineIndexSet = /* @__PURE__ */ new Set();
26
+ for (let regionIndex = 0; regionIndex < regions.length; regionIndex++) {
27
+ const actionOriginalLineNumber = getMergeConflictActionLineNumber(regions[regionIndex]);
28
+ const actionOriginalLineIndex = actionOriginalLineNumber - 1;
29
+ actionOriginalLineNumbersByRegion[regionIndex] = actionOriginalLineNumber;
30
+ actionOriginalLineIndexesByRegion[regionIndex] = actionOriginalLineIndex;
31
+ actionLineIndexSet.add(actionOriginalLineIndex);
32
+ }
33
+ const actionLineNumbersByOriginalIndex = /* @__PURE__ */ new Map();
34
+ let currentLineNumber = 0;
35
+ let incomingLineNumber = 0;
36
+ let actionIndex = 0;
37
+ let nextConflict = regions[actionIndex];
38
+ let nextActionOriginalLineNumber = nextConflict != null ? actionOriginalLineNumbersByRegion[actionIndex] : -1;
39
+ let nextActionOriginalLineIndex = nextConflict != null ? actionOriginalLineIndexesByRegion[actionIndex] : -1;
40
+ for (let index = 0; index < lines.length; index++) {
41
+ const line = lines[index];
42
+ const lineType = lineTypes[index];
43
+ let currentLineNumberAtIndex;
44
+ let incomingLineNumberAtIndex;
45
+ switch (lineType) {
46
+ case "none":
47
+ currentContentChunks.push(line);
48
+ incomingContentChunks.push(line);
49
+ patchContentChunks.push(` ${line}`);
50
+ currentLineNumber++;
51
+ incomingLineNumber++;
52
+ currentLineNumberAtIndex = currentLineNumber;
53
+ incomingLineNumberAtIndex = incomingLineNumber;
54
+ break;
55
+ case "current":
56
+ currentContentChunks.push(line);
57
+ patchContentChunks.push(`-${line}`);
58
+ currentLineNumber++;
59
+ currentLineNumberAtIndex = currentLineNumber;
60
+ break;
61
+ case "incoming":
62
+ incomingContentChunks.push(line);
63
+ patchContentChunks.push(`+${line}`);
64
+ incomingLineNumber++;
65
+ incomingLineNumberAtIndex = incomingLineNumber;
66
+ break;
67
+ case "base":
68
+ case "marker-start":
69
+ case "marker-base":
70
+ case "marker-separator":
71
+ case "marker-end":
72
+ currentContentChunks.push(line);
73
+ incomingContentChunks.push(line);
74
+ patchContentChunks.push(` ${line}`);
75
+ currentLineNumber++;
76
+ incomingLineNumber++;
77
+ currentLineNumberAtIndex = currentLineNumber;
78
+ incomingLineNumberAtIndex = incomingLineNumber;
79
+ break;
80
+ default: assertNever(lineType);
81
+ }
82
+ if (actionLineIndexSet.has(index)) actionLineNumbersByOriginalIndex.set(index, {
83
+ currentLineNumber: currentLineNumberAtIndex,
84
+ incomingLineNumber: incomingLineNumberAtIndex
85
+ });
86
+ while (nextConflict != null && nextActionOriginalLineIndex <= index) {
87
+ const actionLineNumbers = actionLineNumbersByOriginalIndex.get(nextActionOriginalLineIndex);
88
+ actions[actionIndex] = {
89
+ actionOriginalLineIndex: nextActionOriginalLineIndex,
90
+ actionOriginalLineNumber: nextActionOriginalLineNumber,
91
+ currentLineNumber: actionLineNumbers?.currentLineNumber,
92
+ incomingLineNumber: actionLineNumbers?.incomingLineNumber,
93
+ conflict: nextConflict,
94
+ conflictIndex: nextConflict.conflictIndex
95
+ };
96
+ actionIndex++;
97
+ nextConflict = regions[actionIndex];
98
+ if (nextConflict == null) break;
99
+ nextActionOriginalLineNumber = actionOriginalLineNumbersByRegion[actionIndex];
100
+ nextActionOriginalLineIndex = actionOriginalLineIndexesByRegion[actionIndex];
101
+ }
102
+ }
103
+ const currentContents = currentContentChunks.join("");
104
+ const incomingContents = incomingContentChunks.join("");
105
+ const patchContents = patchContentChunks.join("");
106
+ const currentFile = createResolvedConflictFile(file, "current", currentContents);
107
+ const incomingFile = createResolvedConflictFile(file, "incoming", incomingContents);
108
+ const fileDiff = processFile(createMergeConflictPatch({
109
+ name: file.name,
110
+ patchContents,
111
+ currentLineCount: currentLineNumber,
112
+ incomingLineCount: incomingLineNumber
113
+ }), {
114
+ oldFile: currentFile,
115
+ newFile: incomingFile,
116
+ cacheKey: file.cacheKey != null ? `${file.cacheKey}:merge-conflict-diff` : void 0,
117
+ throwOnError: true
118
+ });
119
+ if (fileDiff == null) throw new Error("parseMergeConflictDiffFromFile: failed to build merge conflict diff metadata");
120
+ return {
121
+ fileDiff,
122
+ currentFile,
123
+ incomingFile,
124
+ actions
125
+ };
126
+ }
127
+ function createMergeConflictPatch({ name, patchContents, currentLineCount, incomingLineCount }) {
128
+ return `--- ${name}\n+++ ${name}\n@@ -${currentLineCount > 0 ? 1 : 0},${currentLineCount} +${incomingLineCount > 0 ? 1 : 0},${incomingLineCount} @@\n` + patchContents;
129
+ }
130
+ function createResolvedConflictFile(file, side, contents) {
131
+ return {
132
+ ...file,
133
+ contents,
134
+ cacheKey: file.cacheKey != null ? `${file.cacheKey}:merge-conflict-${side}` : void 0
135
+ };
136
+ }
137
+ function assertNever(value) {
138
+ throw new Error(`parseMergeConflictDiffFromFile: unknown merge conflict line type ${String(value)}`);
139
+ }
140
+
141
+ //#endregion
142
+ export { getMergeConflictActionAnchor, parseMergeConflictDiffFromFile };
143
+ //# sourceMappingURL=parseMergeConflictDiffFromFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseMergeConflictDiffFromFile.js","names":["currentContentChunks: string[]","incomingContentChunks: string[]","patchContentChunks: string[]","actions: MergeConflictDiffAction[]","currentLineNumberAtIndex: number | undefined","incomingLineNumberAtIndex: number | undefined"],"sources":["../../src/utils/parseMergeConflictDiffFromFile.ts"],"sourcesContent":["import type {\n FileContents,\n FileDiffMetadata,\n MergeConflictRegion,\n} from '../types';\nimport {\n getMergeConflictActionLineNumber,\n getMergeConflictParseResult,\n} from './getMergeConflictLineTypes';\nimport { processFile } from './parsePatchFiles';\nimport { splitFileContents } from './splitFileContents';\n\nexport interface ParseMergeConflictDiffFromFileResult {\n fileDiff: FileDiffMetadata;\n currentFile: FileContents;\n incomingFile: FileContents;\n actions: MergeConflictDiffAction[];\n}\n\nexport interface MergeConflictDiffAction {\n actionOriginalLineIndex: number;\n actionOriginalLineNumber: number;\n currentLineNumber: number | undefined;\n incomingLineNumber: number | undefined;\n conflict: MergeConflictRegion;\n conflictIndex: number;\n}\n\ninterface GetMergeConflictActionAnchorReturn {\n side: 'additions' | 'deletions';\n lineNumber: number;\n}\n\nexport function getMergeConflictActionAnchor(\n action: MergeConflictDiffAction\n): GetMergeConflictActionAnchorReturn | undefined {\n if (action.incomingLineNumber != null) {\n return {\n side: 'additions',\n lineNumber: action.incomingLineNumber,\n };\n }\n if (action.currentLineNumber != null) {\n return {\n side: 'deletions',\n lineNumber: action.currentLineNumber,\n };\n }\n return undefined;\n}\n\nexport function parseMergeConflictDiffFromFile(\n file: FileContents\n): ParseMergeConflictDiffFromFileResult {\n const lines = splitFileContents(file.contents);\n const { lineTypes, regions } = getMergeConflictParseResult(lines);\n const currentContentChunks: string[] = [];\n const incomingContentChunks: string[] = [];\n const patchContentChunks: string[] = [];\n const actions: MergeConflictDiffAction[] = new Array(regions.length);\n const actionOriginalLineNumbersByRegion = new Array<number>(regions.length);\n const actionOriginalLineIndexesByRegion = new Array<number>(regions.length);\n const actionLineIndexSet = new Set<number>();\n for (let regionIndex = 0; regionIndex < regions.length; regionIndex++) {\n const actionOriginalLineNumber = getMergeConflictActionLineNumber(\n regions[regionIndex]\n );\n const actionOriginalLineIndex = actionOriginalLineNumber - 1;\n actionOriginalLineNumbersByRegion[regionIndex] = actionOriginalLineNumber;\n actionOriginalLineIndexesByRegion[regionIndex] = actionOriginalLineIndex;\n actionLineIndexSet.add(actionOriginalLineIndex);\n }\n const actionLineNumbersByOriginalIndex = new Map<\n number,\n {\n currentLineNumber: number | undefined;\n incomingLineNumber: number | undefined;\n }\n >();\n let currentLineNumber = 0;\n let incomingLineNumber = 0;\n let actionIndex = 0;\n let nextConflict = regions[actionIndex];\n let nextActionOriginalLineNumber =\n nextConflict != null ? actionOriginalLineNumbersByRegion[actionIndex] : -1;\n let nextActionOriginalLineIndex =\n nextConflict != null ? actionOriginalLineIndexesByRegion[actionIndex] : -1;\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index];\n const lineType = lineTypes[index];\n let currentLineNumberAtIndex: number | undefined;\n let incomingLineNumberAtIndex: number | undefined;\n switch (lineType) {\n case 'none': {\n currentContentChunks.push(line);\n incomingContentChunks.push(line);\n patchContentChunks.push(` ${line}`);\n currentLineNumber++;\n incomingLineNumber++;\n currentLineNumberAtIndex = currentLineNumber;\n incomingLineNumberAtIndex = incomingLineNumber;\n break;\n }\n case 'current': {\n currentContentChunks.push(line);\n patchContentChunks.push(`-${line}`);\n currentLineNumber++;\n currentLineNumberAtIndex = currentLineNumber;\n break;\n }\n case 'incoming': {\n incomingContentChunks.push(line);\n patchContentChunks.push(`+${line}`);\n incomingLineNumber++;\n incomingLineNumberAtIndex = incomingLineNumber;\n break;\n }\n case 'base':\n case 'marker-start':\n case 'marker-base':\n case 'marker-separator':\n case 'marker-end': {\n currentContentChunks.push(line);\n incomingContentChunks.push(line);\n patchContentChunks.push(` ${line}`);\n currentLineNumber++;\n incomingLineNumber++;\n currentLineNumberAtIndex = currentLineNumber;\n incomingLineNumberAtIndex = incomingLineNumber;\n break;\n }\n default: {\n assertNever(lineType);\n }\n }\n\n if (actionLineIndexSet.has(index)) {\n actionLineNumbersByOriginalIndex.set(index, {\n currentLineNumber: currentLineNumberAtIndex,\n incomingLineNumber: incomingLineNumberAtIndex,\n });\n }\n\n // Regions are emitted in a stable order; resolve actions as soon as their\n // anchor original line has been processed.\n while (nextConflict != null && nextActionOriginalLineIndex <= index) {\n const actionLineNumbers = actionLineNumbersByOriginalIndex.get(\n nextActionOriginalLineIndex\n );\n actions[actionIndex] = {\n actionOriginalLineIndex: nextActionOriginalLineIndex,\n actionOriginalLineNumber: nextActionOriginalLineNumber,\n currentLineNumber: actionLineNumbers?.currentLineNumber,\n incomingLineNumber: actionLineNumbers?.incomingLineNumber,\n conflict: nextConflict,\n conflictIndex: nextConflict.conflictIndex,\n };\n actionIndex++;\n nextConflict = regions[actionIndex];\n if (nextConflict == null) {\n break;\n }\n nextActionOriginalLineNumber =\n actionOriginalLineNumbersByRegion[actionIndex];\n nextActionOriginalLineIndex =\n actionOriginalLineIndexesByRegion[actionIndex];\n }\n }\n\n const currentContents = currentContentChunks.join('');\n const incomingContents = incomingContentChunks.join('');\n const patchContents = patchContentChunks.join('');\n\n const currentFile = createResolvedConflictFile(\n file,\n 'current',\n currentContents\n );\n const incomingFile = createResolvedConflictFile(\n file,\n 'incoming',\n incomingContents\n );\n const patch = createMergeConflictPatch({\n name: file.name,\n patchContents,\n currentLineCount: currentLineNumber,\n incomingLineCount: incomingLineNumber,\n });\n\n const fileDiff = processFile(patch, {\n oldFile: currentFile,\n newFile: incomingFile,\n cacheKey:\n file.cacheKey != null\n ? `${file.cacheKey}:merge-conflict-diff`\n : undefined,\n throwOnError: true,\n });\n\n if (fileDiff == null) {\n throw new Error(\n 'parseMergeConflictDiffFromFile: failed to build merge conflict diff metadata'\n );\n }\n\n return {\n fileDiff,\n currentFile,\n incomingFile,\n actions,\n };\n}\n\ninterface CreateMergeConflictPatchProps {\n name: string;\n patchContents: string;\n currentLineCount: number;\n incomingLineCount: number;\n}\n\nfunction createMergeConflictPatch({\n name,\n patchContents,\n currentLineCount,\n incomingLineCount,\n}: CreateMergeConflictPatchProps): string {\n const currentStart = currentLineCount > 0 ? 1 : 0;\n const incomingStart = incomingLineCount > 0 ? 1 : 0;\n return (\n `--- ${name}\\n` +\n `+++ ${name}\\n` +\n `@@ -${currentStart},${currentLineCount} +${incomingStart},${incomingLineCount} @@\\n` +\n patchContents\n );\n}\n\nfunction createResolvedConflictFile(\n file: FileContents,\n side: 'current' | 'incoming',\n contents: string\n): FileContents {\n return {\n ...file,\n contents,\n cacheKey:\n file.cacheKey != null\n ? `${file.cacheKey}:merge-conflict-${side}`\n : undefined,\n };\n}\n\nfunction assertNever(value: never): never {\n throw new Error(\n `parseMergeConflictDiffFromFile: unknown merge conflict line type ${String(value)}`\n );\n}\n"],"mappings":";;;;;AAiCA,SAAgB,6BACd,QACgD;AAChD,KAAI,OAAO,sBAAsB,KAC/B,QAAO;EACL,MAAM;EACN,YAAY,OAAO;EACpB;AAEH,KAAI,OAAO,qBAAqB,KAC9B,QAAO;EACL,MAAM;EACN,YAAY,OAAO;EACpB;;AAKL,SAAgB,+BACd,MACsC;CACtC,MAAM,QAAQ,kBAAkB,KAAK,SAAS;CAC9C,MAAM,EAAE,WAAW,YAAY,4BAA4B,MAAM;CACjE,MAAMA,uBAAiC,EAAE;CACzC,MAAMC,wBAAkC,EAAE;CAC1C,MAAMC,qBAA+B,EAAE;CACvC,MAAMC,UAAqC,IAAI,MAAM,QAAQ,OAAO;CACpE,MAAM,oCAAoC,IAAI,MAAc,QAAQ,OAAO;CAC3E,MAAM,oCAAoC,IAAI,MAAc,QAAQ,OAAO;CAC3E,MAAM,qCAAqB,IAAI,KAAa;AAC5C,MAAK,IAAI,cAAc,GAAG,cAAc,QAAQ,QAAQ,eAAe;EACrE,MAAM,2BAA2B,iCAC/B,QAAQ,aACT;EACD,MAAM,0BAA0B,2BAA2B;AAC3D,oCAAkC,eAAe;AACjD,oCAAkC,eAAe;AACjD,qBAAmB,IAAI,wBAAwB;;CAEjD,MAAM,mDAAmC,IAAI,KAM1C;CACH,IAAI,oBAAoB;CACxB,IAAI,qBAAqB;CACzB,IAAI,cAAc;CAClB,IAAI,eAAe,QAAQ;CAC3B,IAAI,+BACF,gBAAgB,OAAO,kCAAkC,eAAe;CAC1E,IAAI,8BACF,gBAAgB,OAAO,kCAAkC,eAAe;AAC1E,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EACjD,MAAM,OAAO,MAAM;EACnB,MAAM,WAAW,UAAU;EAC3B,IAAIC;EACJ,IAAIC;AACJ,UAAQ,UAAR;GACE,KAAK;AACH,yBAAqB,KAAK,KAAK;AAC/B,0BAAsB,KAAK,KAAK;AAChC,uBAAmB,KAAK,IAAI,OAAO;AACnC;AACA;AACA,+BAA2B;AAC3B,gCAA4B;AAC5B;GAEF,KAAK;AACH,yBAAqB,KAAK,KAAK;AAC/B,uBAAmB,KAAK,IAAI,OAAO;AACnC;AACA,+BAA2B;AAC3B;GAEF,KAAK;AACH,0BAAsB,KAAK,KAAK;AAChC,uBAAmB,KAAK,IAAI,OAAO;AACnC;AACA,gCAA4B;AAC5B;GAEF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;AACH,yBAAqB,KAAK,KAAK;AAC/B,0BAAsB,KAAK,KAAK;AAChC,uBAAmB,KAAK,IAAI,OAAO;AACnC;AACA;AACA,+BAA2B;AAC3B,gCAA4B;AAC5B;GAEF,QACE,aAAY,SAAS;;AAIzB,MAAI,mBAAmB,IAAI,MAAM,CAC/B,kCAAiC,IAAI,OAAO;GAC1C,mBAAmB;GACnB,oBAAoB;GACrB,CAAC;AAKJ,SAAO,gBAAgB,QAAQ,+BAA+B,OAAO;GACnE,MAAM,oBAAoB,iCAAiC,IACzD,4BACD;AACD,WAAQ,eAAe;IACrB,yBAAyB;IACzB,0BAA0B;IAC1B,mBAAmB,mBAAmB;IACtC,oBAAoB,mBAAmB;IACvC,UAAU;IACV,eAAe,aAAa;IAC7B;AACD;AACA,kBAAe,QAAQ;AACvB,OAAI,gBAAgB,KAClB;AAEF,kCACE,kCAAkC;AACpC,iCACE,kCAAkC;;;CAIxC,MAAM,kBAAkB,qBAAqB,KAAK,GAAG;CACrD,MAAM,mBAAmB,sBAAsB,KAAK,GAAG;CACvD,MAAM,gBAAgB,mBAAmB,KAAK,GAAG;CAEjD,MAAM,cAAc,2BAClB,MACA,WACA,gBACD;CACD,MAAM,eAAe,2BACnB,MACA,YACA,iBACD;CAQD,MAAM,WAAW,YAPH,yBAAyB;EACrC,MAAM,KAAK;EACX;EACA,kBAAkB;EAClB,mBAAmB;EACpB,CAAC,EAEkC;EAClC,SAAS;EACT,SAAS;EACT,UACE,KAAK,YAAY,OACb,GAAG,KAAK,SAAS,wBACjB;EACN,cAAc;EACf,CAAC;AAEF,KAAI,YAAY,KACd,OAAM,IAAI,MACR,+EACD;AAGH,QAAO;EACL;EACA;EACA;EACA;EACD;;AAUH,SAAS,yBAAyB,EAChC,MACA,eACA,kBACA,qBACwC;AAGxC,QACE,OAAO,KAAK,QACL,KAAK,QAJO,mBAAmB,IAAI,IAAI,EAK1B,GAAG,iBAAiB,IAJpB,oBAAoB,IAAI,IAAI,EAIU,GAAG,kBAAkB,SAC/E;;AAIJ,SAAS,2BACP,MACA,MACA,UACc;AACd,QAAO;EACL,GAAG;EACH;EACA,UACE,KAAK,YAAY,OACb,GAAG,KAAK,SAAS,kBAAkB,SACnC;EACP;;AAGH,SAAS,YAAY,OAAqB;AACxC,OAAM,IAAI,MACR,oEAAoE,OAAO,MAAM,GAClF"}
@@ -0,0 +1,7 @@
1
+ import { MergeConflictActionPayload } from "../types.js";
2
+
3
+ //#region src/utils/resolveMergeConflict.d.ts
4
+ declare function resolveMergeConflict(contents: string, payload: MergeConflictActionPayload): string;
5
+ //#endregion
6
+ export { resolveMergeConflict };
7
+ //# sourceMappingURL=resolveMergeConflict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveMergeConflict.d.ts","names":["MergeConflictActionPayload","resolveMergeConflict"],"sources":["../../src/utils/resolveMergeConflict.d.ts"],"sourcesContent":["import type { MergeConflictActionPayload } from '../types';\nexport declare function resolveMergeConflict(contents: string, payload: MergeConflictActionPayload): string;\n//# sourceMappingURL=resolveMergeConflict.d.ts.map"],"mappings":";;;iBACwBC,oBAAAA,4BAAgDD"}
@@ -0,0 +1,30 @@
1
+ import { splitFileContents } from "./splitFileContents.js";
2
+ import { getMergeConflictRegions } from "./getMergeConflictLineTypes.js";
3
+
4
+ //#region src/utils/resolveMergeConflict.ts
5
+ function resolveMergeConflict(contents, payload) {
6
+ const lines = splitFileContents(contents);
7
+ const conflict = getMergeConflictRegions(lines).find((region) => region.conflictIndex === payload.conflict.conflictIndex);
8
+ if (conflict == null) return contents;
9
+ return applyMergeConflictResolution(contents, lines, conflict, payload.resolution);
10
+ }
11
+ function applyMergeConflictResolution(contents, lines, conflict, resolution) {
12
+ if (!isConflictRegionValid(conflict, lines.length)) return contents;
13
+ const currentEnd = conflict.baseMarkerLineIndex ?? conflict.separatorLineIndex;
14
+ if (currentEnd <= conflict.startLineIndex || currentEnd > conflict.separatorLineIndex) return contents;
15
+ const currentLines = lines.slice(conflict.startLineIndex + 1, currentEnd);
16
+ const incomingLines = lines.slice(conflict.separatorLineIndex + 1, conflict.endLineIndex);
17
+ const mergedLines = resolution === "current" ? currentLines : resolution === "incoming" ? incomingLines : [...currentLines, ...incomingLines];
18
+ return [
19
+ ...lines.slice(0, conflict.startLineIndex),
20
+ ...mergedLines,
21
+ ...lines.slice(conflict.endLineIndex + 1)
22
+ ].join("");
23
+ }
24
+ function isConflictRegionValid(conflict, totalLines) {
25
+ return conflict.startLineIndex >= 0 && conflict.separatorLineIndex > conflict.startLineIndex && conflict.endLineIndex > conflict.separatorLineIndex && conflict.endLineIndex < totalLines;
26
+ }
27
+
28
+ //#endregion
29
+ export { resolveMergeConflict };
30
+ //# sourceMappingURL=resolveMergeConflict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveMergeConflict.js","names":[],"sources":["../../src/utils/resolveMergeConflict.ts"],"sourcesContent":["import type {\n MergeConflictActionPayload,\n MergeConflictRegion,\n MergeConflictResolution,\n} from '../types';\nimport { getMergeConflictRegions } from './getMergeConflictLineTypes';\nimport { splitFileContents } from './splitFileContents';\n\nexport function resolveMergeConflict(\n contents: string,\n payload: MergeConflictActionPayload\n): string {\n const lines = splitFileContents(contents);\n const conflict = getMergeConflictRegions(lines).find(\n (region) => region.conflictIndex === payload.conflict.conflictIndex\n );\n if (conflict == null) {\n return contents;\n }\n return applyMergeConflictResolution(\n contents,\n lines,\n conflict,\n payload.resolution\n );\n}\n\nfunction applyMergeConflictResolution(\n contents: string,\n lines: string[],\n conflict: MergeConflictRegion,\n resolution: MergeConflictResolution\n): string {\n if (!isConflictRegionValid(conflict, lines.length)) {\n return contents;\n }\n\n const currentEnd =\n conflict.baseMarkerLineIndex ?? conflict.separatorLineIndex;\n if (\n currentEnd <= conflict.startLineIndex ||\n currentEnd > conflict.separatorLineIndex\n ) {\n return contents;\n }\n\n const currentLines = lines.slice(conflict.startLineIndex + 1, currentEnd);\n const incomingLines = lines.slice(\n conflict.separatorLineIndex + 1,\n conflict.endLineIndex\n );\n\n const mergedLines =\n resolution === 'current'\n ? currentLines\n : resolution === 'incoming'\n ? incomingLines\n : [...currentLines, ...incomingLines];\n\n return [\n ...lines.slice(0, conflict.startLineIndex),\n ...mergedLines,\n ...lines.slice(conflict.endLineIndex + 1),\n ].join('');\n}\n\nfunction isConflictRegionValid(\n conflict: MergeConflictRegion,\n totalLines: number\n): boolean {\n return (\n conflict.startLineIndex >= 0 &&\n conflict.separatorLineIndex > conflict.startLineIndex &&\n conflict.endLineIndex > conflict.separatorLineIndex &&\n conflict.endLineIndex < totalLines\n );\n}\n"],"mappings":";;;;AAQA,SAAgB,qBACd,UACA,SACQ;CACR,MAAM,QAAQ,kBAAkB,SAAS;CACzC,MAAM,WAAW,wBAAwB,MAAM,CAAC,MAC7C,WAAW,OAAO,kBAAkB,QAAQ,SAAS,cACvD;AACD,KAAI,YAAY,KACd,QAAO;AAET,QAAO,6BACL,UACA,OACA,UACA,QAAQ,WACT;;AAGH,SAAS,6BACP,UACA,OACA,UACA,YACQ;AACR,KAAI,CAAC,sBAAsB,UAAU,MAAM,OAAO,CAChD,QAAO;CAGT,MAAM,aACJ,SAAS,uBAAuB,SAAS;AAC3C,KACE,cAAc,SAAS,kBACvB,aAAa,SAAS,mBAEtB,QAAO;CAGT,MAAM,eAAe,MAAM,MAAM,SAAS,iBAAiB,GAAG,WAAW;CACzE,MAAM,gBAAgB,MAAM,MAC1B,SAAS,qBAAqB,GAC9B,SAAS,aACV;CAED,MAAM,cACJ,eAAe,YACX,eACA,eAAe,aACb,gBACA,CAAC,GAAG,cAAc,GAAG,cAAc;AAE3C,QAAO;EACL,GAAG,MAAM,MAAM,GAAG,SAAS,eAAe;EAC1C,GAAG;EACH,GAAG,MAAM,MAAM,SAAS,eAAe,EAAE;EAC1C,CAAC,KAAK,GAAG;;AAGZ,SAAS,sBACP,UACA,YACS;AACT,QACE,SAAS,kBAAkB,KAC3B,SAAS,qBAAqB,SAAS,kBACvC,SAAS,eAAe,SAAS,sBACjC,SAAS,eAAe"}
@@ -15,6 +15,7 @@ function getHunkSeparatorHeight(type, customHeight) {
15
15
  case "simple": return 4;
16
16
  case "metadata":
17
17
  case "line-info":
18
+ case "line-info-basic":
18
19
  case "custom": return 32;
19
20
  }
20
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolveVirtualFileMetrics.js","names":["metrics: VirtualFileMetrics"],"sources":["../../src/utils/resolveVirtualFileMetrics.ts"],"sourcesContent":["import { DEFAULT_VIRTUAL_FILE_METRICS } from '../constants';\nimport type { HunkSeparators, VirtualFileMetrics } from '../types';\n\nexport function resolveVirtualFileMetrics(\n hunkSeparators: HunkSeparators,\n metricsOverride?: Partial<VirtualFileMetrics>\n): VirtualFileMetrics {\n const metrics: VirtualFileMetrics = {\n ...DEFAULT_VIRTUAL_FILE_METRICS,\n ...metricsOverride,\n };\n metrics.hunkSeparatorHeight = getHunkSeparatorHeight(\n hunkSeparators,\n metricsOverride?.hunkSeparatorHeight\n );\n return metrics;\n}\n\nfunction getHunkSeparatorHeight(\n type: HunkSeparators,\n customHeight: number | undefined\n): number {\n if (customHeight != null) {\n return customHeight;\n }\n switch (type) {\n case 'simple':\n return 4;\n case 'metadata':\n case 'line-info':\n case 'custom':\n return 32;\n }\n}\n"],"mappings":";;;AAGA,SAAgB,0BACd,gBACA,iBACoB;CACpB,MAAMA,UAA8B;EAClC,GAAG;EACH,GAAG;EACJ;AACD,SAAQ,sBAAsB,uBAC5B,gBACA,iBAAiB,oBAClB;AACD,QAAO;;AAGT,SAAS,uBACP,MACA,cACQ;AACR,KAAI,gBAAgB,KAClB,QAAO;AAET,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK,SACH,QAAO"}
1
+ {"version":3,"file":"resolveVirtualFileMetrics.js","names":["metrics: VirtualFileMetrics"],"sources":["../../src/utils/resolveVirtualFileMetrics.ts"],"sourcesContent":["import { DEFAULT_VIRTUAL_FILE_METRICS } from '../constants';\nimport type { HunkSeparators, VirtualFileMetrics } from '../types';\n\nexport function resolveVirtualFileMetrics(\n hunkSeparators: HunkSeparators,\n metricsOverride?: Partial<VirtualFileMetrics>\n): VirtualFileMetrics {\n const metrics: VirtualFileMetrics = {\n ...DEFAULT_VIRTUAL_FILE_METRICS,\n ...metricsOverride,\n };\n metrics.hunkSeparatorHeight = getHunkSeparatorHeight(\n hunkSeparators,\n metricsOverride?.hunkSeparatorHeight\n );\n return metrics;\n}\n\nfunction getHunkSeparatorHeight(\n type: HunkSeparators,\n customHeight: number | undefined\n): number {\n if (customHeight != null) {\n return customHeight;\n }\n switch (type) {\n case 'simple':\n return 4;\n case 'metadata':\n case 'line-info':\n case 'line-info-basic':\n case 'custom':\n return 32;\n }\n}\n"],"mappings":";;;AAGA,SAAgB,0BACd,gBACA,iBACoB;CACpB,MAAMA,UAA8B;EAClC,GAAG;EACH,GAAG;EACJ;AACD,SAAQ,sBAAsB,uBAC5B,gBACA,iBAAiB,oBAClB;AACD,QAAO;;AAGT,SAAS,uBACP,MACA,cACQ;AACR,KAAI,gBAAgB,KAClB,QAAO;AAET,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,SACH,QAAO"}
@@ -10,7 +10,8 @@ declare function setPreNodeProperties(pre: HTMLPreElement, {
10
10
  split,
11
11
  themeStyles,
12
12
  themeType,
13
- totalLines
13
+ totalLines,
14
+ customProperties
14
15
  }: PrePropertiesConfig): HTMLPreElement;
15
16
  //#endregion
16
17
  export { setPreNodeProperties };
@@ -1 +1 @@
1
- {"version":3,"file":"setWrapperNodeProps.d.ts","names":["PrePropertiesConfig","setPreNodeProperties","HTMLPreElement","type","diffIndicators","disableBackground","disableLineNumbers","overflow","split","themeStyles","themeType","totalLines"],"sources":["../../src/utils/setWrapperNodeProps.d.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\nexport declare function setPreNodeProperties(pre: HTMLPreElement, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines }: PrePropertiesConfig): HTMLPreElement;\n//# sourceMappingURL=setWrapperNodeProps.d.ts.map"],"mappings":";;;iBACwBC,oBAAAA,MAA0BC;;;;;;;;;;GAAsIF,sBAAsBE"}
1
+ {"version":3,"file":"setWrapperNodeProps.d.ts","names":["PrePropertiesConfig","setPreNodeProperties","HTMLPreElement","type","diffIndicators","disableBackground","disableLineNumbers","overflow","split","themeStyles","themeType","totalLines","customProperties"],"sources":["../../src/utils/setWrapperNodeProps.d.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\nexport declare function setPreNodeProperties(pre: HTMLPreElement, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines, customProperties }: PrePropertiesConfig): HTMLPreElement;\n//# sourceMappingURL=setWrapperNodeProps.d.ts.map"],"mappings":";;;iBACwBC,oBAAAA,MAA0BC;;;;;;;;;;;GAAwJF,sBAAsBE"}
@@ -1,5 +1,9 @@
1
1
  //#region src/utils/setWrapperNodeProps.ts
2
- function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines }) {
2
+ function setPreNodeProperties(pre, { type, diffIndicators, disableBackground, disableLineNumbers, overflow, split, themeStyles, themeType, totalLines, customProperties }) {
3
+ if (customProperties != null) for (const key in customProperties) {
4
+ const value = customProperties[key];
5
+ if (value != null) pre.setAttribute(key, `${value}`);
6
+ }
3
7
  if (type === "diff") {
4
8
  pre.setAttribute("data-diff", "");
5
9
  pre.removeAttribute("data-file");
@@ -1 +1 @@
1
- {"version":3,"file":"setWrapperNodeProps.js","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\n\nexport function setPreNodeProperties(\n pre: HTMLPreElement,\n {\n type,\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split,\n themeStyles,\n themeType,\n totalLines,\n }: PrePropertiesConfig\n): HTMLPreElement {\n if (type === 'diff') {\n pre.setAttribute('data-diff', '');\n pre.removeAttribute('data-file');\n } else {\n pre.setAttribute('data-file', '');\n pre.removeAttribute('data-diff');\n }\n if (themeType === 'system') {\n pre.removeAttribute('data-theme-type');\n } else {\n pre.setAttribute('data-theme-type', themeType);\n }\n switch (diffIndicators) {\n case 'bars':\n case 'classic':\n pre.setAttribute('data-indicators', diffIndicators);\n break;\n case 'none':\n pre.removeAttribute('data-indicators');\n break;\n }\n if (disableLineNumbers) {\n pre.setAttribute('data-disable-line-numbers', '');\n } else {\n pre.removeAttribute('data-disable-line-numbers');\n }\n if (disableBackground) {\n pre.removeAttribute('data-background');\n } else {\n pre.setAttribute('data-background', '');\n }\n if (type === 'diff') {\n pre.setAttribute('data-diff-type', split ? 'split' : 'single');\n } else {\n pre.removeAttribute('data-diff-type');\n }\n pre.setAttribute('data-overflow', overflow);\n pre.tabIndex = 0;\n // Set theme color custom properties as inline styles on pre element\n pre.style = themeStyles;\n // Set CSS custom property for line number column width\n pre.style.setProperty(\n '--diffs-min-number-column-width-default',\n `${`${totalLines}`.length}ch`\n );\n return pre;\n}\n"],"mappings":";AAEA,SAAgB,qBACd,KACA,EACE,MACA,gBACA,mBACA,oBACA,UACA,OACA,aACA,WACA,cAEc;AAChB,KAAI,SAAS,QAAQ;AACnB,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;QAC3B;AACL,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;;AAElC,KAAI,cAAc,SAChB,KAAI,gBAAgB,kBAAkB;KAEtC,KAAI,aAAa,mBAAmB,UAAU;AAEhD,SAAQ,gBAAR;EACE,KAAK;EACL,KAAK;AACH,OAAI,aAAa,mBAAmB,eAAe;AACnD;EACF,KAAK;AACH,OAAI,gBAAgB,kBAAkB;AACtC;;AAEJ,KAAI,mBACF,KAAI,aAAa,6BAA6B,GAAG;KAEjD,KAAI,gBAAgB,4BAA4B;AAElD,KAAI,kBACF,KAAI,gBAAgB,kBAAkB;KAEtC,KAAI,aAAa,mBAAmB,GAAG;AAEzC,KAAI,SAAS,OACX,KAAI,aAAa,kBAAkB,QAAQ,UAAU,SAAS;KAE9D,KAAI,gBAAgB,iBAAiB;AAEvC,KAAI,aAAa,iBAAiB,SAAS;AAC3C,KAAI,WAAW;AAEf,KAAI,QAAQ;AAEZ,KAAI,MAAM,YACR,2CACA,GAAG,GAAG,aAAa,OAAO,IAC3B;AACD,QAAO"}
1
+ {"version":3,"file":"setWrapperNodeProps.js","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\n\nexport function setPreNodeProperties(\n pre: HTMLPreElement,\n {\n type,\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split,\n themeStyles,\n themeType,\n totalLines,\n customProperties,\n }: PrePropertiesConfig\n): HTMLPreElement {\n // NOTE: We always apply custom properties first so the important properties\n // cannot be overridden.\n if (customProperties != null) {\n for (const key in customProperties) {\n const value = customProperties[key];\n if (value != null) {\n pre.setAttribute(key, `${value}`);\n }\n }\n }\n if (type === 'diff') {\n pre.setAttribute('data-diff', '');\n pre.removeAttribute('data-file');\n } else {\n pre.setAttribute('data-file', '');\n pre.removeAttribute('data-diff');\n }\n if (themeType === 'system') {\n pre.removeAttribute('data-theme-type');\n } else {\n pre.setAttribute('data-theme-type', themeType);\n }\n switch (diffIndicators) {\n case 'bars':\n case 'classic':\n pre.setAttribute('data-indicators', diffIndicators);\n break;\n case 'none':\n pre.removeAttribute('data-indicators');\n break;\n }\n if (disableLineNumbers) {\n pre.setAttribute('data-disable-line-numbers', '');\n } else {\n pre.removeAttribute('data-disable-line-numbers');\n }\n if (disableBackground) {\n pre.removeAttribute('data-background');\n } else {\n pre.setAttribute('data-background', '');\n }\n if (type === 'diff') {\n pre.setAttribute('data-diff-type', split ? 'split' : 'single');\n } else {\n pre.removeAttribute('data-diff-type');\n }\n pre.setAttribute('data-overflow', overflow);\n pre.tabIndex = 0;\n // Set theme color custom properties as inline styles on pre element\n pre.style = themeStyles;\n // Set CSS custom property for line number column width\n pre.style.setProperty(\n '--diffs-min-number-column-width-default',\n `${`${totalLines}`.length}ch`\n );\n return pre;\n}\n"],"mappings":";AAEA,SAAgB,qBACd,KACA,EACE,MACA,gBACA,mBACA,oBACA,UACA,OACA,aACA,WACA,YACA,oBAEc;AAGhB,KAAI,oBAAoB,KACtB,MAAK,MAAM,OAAO,kBAAkB;EAClC,MAAM,QAAQ,iBAAiB;AAC/B,MAAI,SAAS,KACX,KAAI,aAAa,KAAK,GAAG,QAAQ;;AAIvC,KAAI,SAAS,QAAQ;AACnB,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;QAC3B;AACL,MAAI,aAAa,aAAa,GAAG;AACjC,MAAI,gBAAgB,YAAY;;AAElC,KAAI,cAAc,SAChB,KAAI,gBAAgB,kBAAkB;KAEtC,KAAI,aAAa,mBAAmB,UAAU;AAEhD,SAAQ,gBAAR;EACE,KAAK;EACL,KAAK;AACH,OAAI,aAAa,mBAAmB,eAAe;AACnD;EACF,KAAK;AACH,OAAI,gBAAgB,kBAAkB;AACtC;;AAEJ,KAAI,mBACF,KAAI,aAAa,6BAA6B,GAAG;KAEjD,KAAI,gBAAgB,4BAA4B;AAElD,KAAI,kBACF,KAAI,gBAAgB,kBAAkB;KAEtC,KAAI,aAAa,mBAAmB,GAAG;AAEzC,KAAI,SAAS,OACX,KAAI,aAAa,kBAAkB,QAAQ,UAAU,SAAS;KAE9D,KAAI,gBAAgB,iBAAiB;AAEvC,KAAI,aAAa,iBAAiB,SAAS;AAC3C,KAAI,WAAW;AAEf,KAAI,QAAQ;AAEZ,KAAI,MAAM,YACR,2CACA,GAAG,GAAG,aAAa,OAAO,IAC3B;AACD,QAAO"}
@@ -13,6 +13,7 @@ interface ThemeSubscriber {
13
13
  declare class WorkerPoolManager {
14
14
  private options;
15
15
  private highlighter;
16
+ private readonly preferredHighlighter;
16
17
  private renderOptions;
17
18
  private initialized;
18
19
  private workers;
@@ -30,7 +31,8 @@ declare class WorkerPoolManager {
30
31
  langs,
31
32
  theme,
32
33
  lineDiffType,
33
- tokenizeMaxLineLength
34
+ tokenizeMaxLineLength,
35
+ preferredHighlighter
34
36
  }: WorkerInitializationRenderOptions);
35
37
  isWorkingPool(): boolean;
36
38
  getFileResultCache(file: FileContents): RenderFileResult | undefined;
@@ -69,7 +71,7 @@ declare class WorkerPoolManager {
69
71
  private _queuedDrain;
70
72
  private queueDrain;
71
73
  private assignWorkerToTask;
72
- private clearWorkerTask;
74
+ private cleanWorkerAndTask;
73
75
  private executeTask;
74
76
  private getAvailableWorker;
75
77
  private generateRequestId;