@gitwand/core 1.6.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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +52 -0
  3. package/dist/__tests__/bench.bench.d.ts +14 -0
  4. package/dist/__tests__/bench.bench.d.ts.map +1 -0
  5. package/dist/__tests__/bench.bench.js +137 -0
  6. package/dist/__tests__/bench.bench.js.map +1 -0
  7. package/dist/__tests__/confidence-v14.test.d.ts +13 -0
  8. package/dist/__tests__/confidence-v14.test.d.ts.map +1 -0
  9. package/dist/__tests__/confidence-v14.test.js +284 -0
  10. package/dist/__tests__/confidence-v14.test.js.map +1 -0
  11. package/dist/__tests__/config.test.d.ts +2 -0
  12. package/dist/__tests__/config.test.d.ts.map +1 -0
  13. package/dist/__tests__/config.test.js +317 -0
  14. package/dist/__tests__/config.test.js.map +1 -0
  15. package/dist/__tests__/corpus.d.ts +36 -0
  16. package/dist/__tests__/corpus.d.ts.map +1 -0
  17. package/dist/__tests__/corpus.js +541 -0
  18. package/dist/__tests__/corpus.js.map +1 -0
  19. package/dist/__tests__/corpus.test.d.ts +17 -0
  20. package/dist/__tests__/corpus.test.d.ts.map +1 -0
  21. package/dist/__tests__/corpus.test.js +179 -0
  22. package/dist/__tests__/corpus.test.js.map +1 -0
  23. package/dist/__tests__/diff.test.d.ts +10 -0
  24. package/dist/__tests__/diff.test.d.ts.map +1 -0
  25. package/dist/__tests__/diff.test.js +178 -0
  26. package/dist/__tests__/diff.test.js.map +1 -0
  27. package/dist/__tests__/format-resolvers.test.d.ts +2 -0
  28. package/dist/__tests__/format-resolvers.test.d.ts.map +1 -0
  29. package/dist/__tests__/format-resolvers.test.js +577 -0
  30. package/dist/__tests__/format-resolvers.test.js.map +1 -0
  31. package/dist/__tests__/imports-extended.test.d.ts +2 -0
  32. package/dist/__tests__/imports-extended.test.d.ts.map +1 -0
  33. package/dist/__tests__/imports-extended.test.js +94 -0
  34. package/dist/__tests__/imports-extended.test.js.map +1 -0
  35. package/dist/__tests__/lockfile-resolvers.test.d.ts +2 -0
  36. package/dist/__tests__/lockfile-resolvers.test.d.ts.map +1 -0
  37. package/dist/__tests__/lockfile-resolvers.test.js +200 -0
  38. package/dist/__tests__/lockfile-resolvers.test.js.map +1 -0
  39. package/dist/__tests__/patterns/insertion-at-boundary.test.d.ts +10 -0
  40. package/dist/__tests__/patterns/insertion-at-boundary.test.d.ts.map +1 -0
  41. package/dist/__tests__/patterns/insertion-at-boundary.test.js +185 -0
  42. package/dist/__tests__/patterns/insertion-at-boundary.test.js.map +1 -0
  43. package/dist/__tests__/patterns/reorder-only.test.d.ts +10 -0
  44. package/dist/__tests__/patterns/reorder-only.test.d.ts.map +1 -0
  45. package/dist/__tests__/patterns/reorder-only.test.js +181 -0
  46. package/dist/__tests__/patterns/reorder-only.test.js.map +1 -0
  47. package/dist/__tests__/phase-7-2-3b.test.d.ts +6 -0
  48. package/dist/__tests__/phase-7-2-3b.test.d.ts.map +1 -0
  49. package/dist/__tests__/phase-7-2-3b.test.js +730 -0
  50. package/dist/__tests__/phase-7-2-3b.test.js.map +1 -0
  51. package/dist/__tests__/resolver.test.d.ts +2 -0
  52. package/dist/__tests__/resolver.test.d.ts.map +1 -0
  53. package/dist/__tests__/resolver.test.js +927 -0
  54. package/dist/__tests__/resolver.test.js.map +1 -0
  55. package/dist/__tests__/resolvers/cargo.test.d.ts +10 -0
  56. package/dist/__tests__/resolvers/cargo.test.d.ts.map +1 -0
  57. package/dist/__tests__/resolvers/cargo.test.js +158 -0
  58. package/dist/__tests__/resolvers/cargo.test.js.map +1 -0
  59. package/dist/__tests__/resolvers/dockerfile.test.d.ts +8 -0
  60. package/dist/__tests__/resolvers/dockerfile.test.d.ts.map +1 -0
  61. package/dist/__tests__/resolvers/dockerfile.test.js +120 -0
  62. package/dist/__tests__/resolvers/dockerfile.test.js.map +1 -0
  63. package/dist/__tests__/resolvers/dotenv.test.d.ts +9 -0
  64. package/dist/__tests__/resolvers/dotenv.test.d.ts.map +1 -0
  65. package/dist/__tests__/resolvers/dotenv.test.js +113 -0
  66. package/dist/__tests__/resolvers/dotenv.test.js.map +1 -0
  67. package/dist/__tests__/resolvers/improvements-v14.test.d.ts +8 -0
  68. package/dist/__tests__/resolvers/improvements-v14.test.d.ts.map +1 -0
  69. package/dist/__tests__/resolvers/improvements-v14.test.js +306 -0
  70. package/dist/__tests__/resolvers/improvements-v14.test.js.map +1 -0
  71. package/dist/__tests__/validation.test.d.ts +12 -0
  72. package/dist/__tests__/validation.test.d.ts.map +1 -0
  73. package/dist/__tests__/validation.test.js +136 -0
  74. package/dist/__tests__/validation.test.js.map +1 -0
  75. package/dist/classifier.d.ts +21 -0
  76. package/dist/classifier.d.ts.map +1 -0
  77. package/dist/classifier.js +127 -0
  78. package/dist/classifier.js.map +1 -0
  79. package/dist/config.d.ts +108 -0
  80. package/dist/config.d.ts.map +1 -0
  81. package/dist/config.js +200 -0
  82. package/dist/config.js.map +1 -0
  83. package/dist/diff.d.ts +69 -0
  84. package/dist/diff.d.ts.map +1 -0
  85. package/dist/diff.js +328 -0
  86. package/dist/diff.js.map +1 -0
  87. package/dist/index.d.ts +47 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +38 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/parser.d.ts +39 -0
  92. package/dist/parser.d.ts.map +1 -0
  93. package/dist/parser.js +164 -0
  94. package/dist/parser.js.map +1 -0
  95. package/dist/patterns/complex.d.ts +5 -0
  96. package/dist/patterns/complex.d.ts.map +1 -0
  97. package/dist/patterns/complex.js +27 -0
  98. package/dist/patterns/complex.js.map +1 -0
  99. package/dist/patterns/delete-no-change.d.ts +4 -0
  100. package/dist/patterns/delete-no-change.d.ts.map +1 -0
  101. package/dist/patterns/delete-no-change.js +75 -0
  102. package/dist/patterns/delete-no-change.js.map +1 -0
  103. package/dist/patterns/insertion-at-boundary.d.ts +22 -0
  104. package/dist/patterns/insertion-at-boundary.d.ts.map +1 -0
  105. package/dist/patterns/insertion-at-boundary.js +164 -0
  106. package/dist/patterns/insertion-at-boundary.js.map +1 -0
  107. package/dist/patterns/non-overlapping.d.ts +4 -0
  108. package/dist/patterns/non-overlapping.d.ts.map +1 -0
  109. package/dist/patterns/non-overlapping.js +28 -0
  110. package/dist/patterns/non-overlapping.js.map +1 -0
  111. package/dist/patterns/one-side-change.d.ts +4 -0
  112. package/dist/patterns/one-side-change.d.ts.map +1 -0
  113. package/dist/patterns/one-side-change.js +45 -0
  114. package/dist/patterns/one-side-change.js.map +1 -0
  115. package/dist/patterns/reorder-only.d.ts +14 -0
  116. package/dist/patterns/reorder-only.d.ts.map +1 -0
  117. package/dist/patterns/reorder-only.js +81 -0
  118. package/dist/patterns/reorder-only.js.map +1 -0
  119. package/dist/patterns/same-change.d.ts +4 -0
  120. package/dist/patterns/same-change.d.ts.map +1 -0
  121. package/dist/patterns/same-change.js +25 -0
  122. package/dist/patterns/same-change.js.map +1 -0
  123. package/dist/patterns/utils.d.ts +70 -0
  124. package/dist/patterns/utils.d.ts.map +1 -0
  125. package/dist/patterns/utils.js +206 -0
  126. package/dist/patterns/utils.js.map +1 -0
  127. package/dist/patterns/value-only-change.d.ts +4 -0
  128. package/dist/patterns/value-only-change.d.ts.map +1 -0
  129. package/dist/patterns/value-only-change.js +34 -0
  130. package/dist/patterns/value-only-change.js.map +1 -0
  131. package/dist/patterns/whitespace-only.d.ts +4 -0
  132. package/dist/patterns/whitespace-only.d.ts.map +1 -0
  133. package/dist/patterns/whitespace-only.js +32 -0
  134. package/dist/patterns/whitespace-only.js.map +1 -0
  135. package/dist/resolver/assemble.d.ts +25 -0
  136. package/dist/resolver/assemble.d.ts.map +1 -0
  137. package/dist/resolver/assemble.js +170 -0
  138. package/dist/resolver/assemble.js.map +1 -0
  139. package/dist/resolver/format-dispatch.d.ts +40 -0
  140. package/dist/resolver/format-dispatch.d.ts.map +1 -0
  141. package/dist/resolver/format-dispatch.js +51 -0
  142. package/dist/resolver/format-dispatch.js.map +1 -0
  143. package/dist/resolver/generated-detection.d.ts +48 -0
  144. package/dist/resolver/generated-detection.d.ts.map +1 -0
  145. package/dist/resolver/generated-detection.js +123 -0
  146. package/dist/resolver/generated-detection.js.map +1 -0
  147. package/dist/resolver/index.d.ts +26 -0
  148. package/dist/resolver/index.d.ts.map +1 -0
  149. package/dist/resolver/index.js +147 -0
  150. package/dist/resolver/index.js.map +1 -0
  151. package/dist/resolver/policy.d.ts +53 -0
  152. package/dist/resolver/policy.d.ts.map +1 -0
  153. package/dist/resolver/policy.js +99 -0
  154. package/dist/resolver/policy.js.map +1 -0
  155. package/dist/resolver/validation.d.ts +28 -0
  156. package/dist/resolver/validation.d.ts.map +1 -0
  157. package/dist/resolver/validation.js +96 -0
  158. package/dist/resolver/validation.js.map +1 -0
  159. package/dist/resolver.d.ts +18 -0
  160. package/dist/resolver.d.ts.map +1 -0
  161. package/dist/resolver.js +18 -0
  162. package/dist/resolver.js.map +1 -0
  163. package/dist/resolvers/cargo.d.ts +34 -0
  164. package/dist/resolvers/cargo.d.ts.map +1 -0
  165. package/dist/resolvers/cargo.js +262 -0
  166. package/dist/resolvers/cargo.js.map +1 -0
  167. package/dist/resolvers/css.d.ts +60 -0
  168. package/dist/resolvers/css.d.ts.map +1 -0
  169. package/dist/resolvers/css.js +531 -0
  170. package/dist/resolvers/css.js.map +1 -0
  171. package/dist/resolvers/dispatcher.d.ts +78 -0
  172. package/dist/resolvers/dispatcher.d.ts.map +1 -0
  173. package/dist/resolvers/dispatcher.js +290 -0
  174. package/dist/resolvers/dispatcher.js.map +1 -0
  175. package/dist/resolvers/dockerfile.d.ts +24 -0
  176. package/dist/resolvers/dockerfile.d.ts.map +1 -0
  177. package/dist/resolvers/dockerfile.js +221 -0
  178. package/dist/resolvers/dockerfile.js.map +1 -0
  179. package/dist/resolvers/dotenv.d.ts +27 -0
  180. package/dist/resolvers/dotenv.d.ts.map +1 -0
  181. package/dist/resolvers/dotenv.js +114 -0
  182. package/dist/resolvers/dotenv.js.map +1 -0
  183. package/dist/resolvers/imports.d.ts +63 -0
  184. package/dist/resolvers/imports.d.ts.map +1 -0
  185. package/dist/resolvers/imports.js +513 -0
  186. package/dist/resolvers/imports.js.map +1 -0
  187. package/dist/resolvers/json.d.ts +48 -0
  188. package/dist/resolvers/json.d.ts.map +1 -0
  189. package/dist/resolvers/json.js +363 -0
  190. package/dist/resolvers/json.js.map +1 -0
  191. package/dist/resolvers/lockfile-npm.d.ts +38 -0
  192. package/dist/resolvers/lockfile-npm.d.ts.map +1 -0
  193. package/dist/resolvers/lockfile-npm.js +267 -0
  194. package/dist/resolvers/lockfile-npm.js.map +1 -0
  195. package/dist/resolvers/lockfile-pnpm.d.ts +44 -0
  196. package/dist/resolvers/lockfile-pnpm.d.ts.map +1 -0
  197. package/dist/resolvers/lockfile-pnpm.js +277 -0
  198. package/dist/resolvers/lockfile-pnpm.js.map +1 -0
  199. package/dist/resolvers/lockfile-yarn.d.ts +40 -0
  200. package/dist/resolvers/lockfile-yarn.d.ts.map +1 -0
  201. package/dist/resolvers/lockfile-yarn.js +184 -0
  202. package/dist/resolvers/lockfile-yarn.js.map +1 -0
  203. package/dist/resolvers/markdown.d.ts +64 -0
  204. package/dist/resolvers/markdown.d.ts.map +1 -0
  205. package/dist/resolvers/markdown.js +335 -0
  206. package/dist/resolvers/markdown.js.map +1 -0
  207. package/dist/resolvers/vue.d.ts +65 -0
  208. package/dist/resolvers/vue.d.ts.map +1 -0
  209. package/dist/resolvers/vue.js +258 -0
  210. package/dist/resolvers/vue.js.map +1 -0
  211. package/dist/resolvers/yaml.d.ts +65 -0
  212. package/dist/resolvers/yaml.d.ts.map +1 -0
  213. package/dist/resolvers/yaml.js +405 -0
  214. package/dist/resolvers/yaml.js.map +1 -0
  215. package/dist/types.d.ts +256 -0
  216. package/dist/types.d.ts.map +1 -0
  217. package/dist/types.js +8 -0
  218. package/dist/types.js.map +1 -0
  219. package/package.json +57 -0
@@ -0,0 +1,531 @@
1
+ /**
2
+ * GitWand — Résolveur CSS/SCSS/Less
3
+ *
4
+ * Résout les conflits dans les fichiers CSS, SCSS et Less en analysant
5
+ * la structure des règles (sélecteur + bloc de propriétés) et en fusionnant
6
+ * règle par règle.
7
+ *
8
+ * Stratégie :
9
+ * 1. Parser les trois versions en "règles" CSS : sélecteur + propriétés
10
+ * 2. Pour chaque règle :
11
+ * - Absente de base → ajout (accepter)
12
+ * - Modifiée d'un seul côté → accepter la modification
13
+ * - Same change → accepter
14
+ * - Modifiée des deux côtés → tenter une fusion propriété par propriété
15
+ * - Conflit réel → fallback textuel (null)
16
+ * 3. Reconnaître aussi les at-rules (@media, @keyframes, @import, etc.)
17
+ *
18
+ * Limites :
19
+ * - Les sélecteurs imbriqués SCSS (`.parent { .child { } }`) ne sont pas
20
+ * récursivement fusionnés (traités comme blocs opaques)
21
+ * - Les at-rules avec blocs (@media) : fusion conservative sur le bloc complet
22
+ * - Les variables CSS (--var: value) et SCSS ($var: value) : traitées comme propriétés
23
+ */
24
+ // ─── Parser CSS ───────────────────────────────────────────
25
+ const RE_SELECTOR_OPEN = /^([^{]+)\{$/;
26
+ const RE_AT_IMPORT = /^@import\s+/;
27
+ const RE_CLOSE_BRACE = /^\}\s*$/;
28
+ const RE_PROPERTY = /^[\w$\-\-]+[^:]*:\s*.+;?\s*$/;
29
+ const RE_COMMENT_LINE = /^\s*\/[*/]/;
30
+ const RE_BLANK = /^\s*$/;
31
+ /**
32
+ * Parse un tableau de lignes CSS en règles structurées.
33
+ */
34
+ export function parseCssRules(lines) {
35
+ const rules = [];
36
+ let i = 0;
37
+ while (i < lines.length) {
38
+ const line = lines[i].trim();
39
+ // Lignes vides
40
+ if (RE_BLANK.test(line)) {
41
+ rules.push({
42
+ selector: "",
43
+ properties: [],
44
+ rawLines: [lines[i]],
45
+ leadingComments: [],
46
+ kind: "blank",
47
+ });
48
+ i++;
49
+ continue;
50
+ }
51
+ // Commentaires sur une ligne (// ou /* ... */)
52
+ if (RE_COMMENT_LINE.test(line)) {
53
+ const commentLines = [];
54
+ // Absorber les lignes de commentaire consécutives
55
+ while (i < lines.length && (RE_COMMENT_LINE.test(lines[i].trim()) || RE_BLANK.test(lines[i].trim()))) {
56
+ commentLines.push(lines[i]);
57
+ i++;
58
+ }
59
+ rules.push({
60
+ selector: "",
61
+ properties: [],
62
+ rawLines: commentLines,
63
+ leadingComments: commentLines,
64
+ kind: "comment",
65
+ });
66
+ continue;
67
+ }
68
+ // @import (inline, pas de bloc)
69
+ if (RE_AT_IMPORT.test(line)) {
70
+ rules.push({
71
+ selector: line,
72
+ properties: [],
73
+ rawLines: [lines[i]],
74
+ leadingComments: [],
75
+ kind: "import",
76
+ });
77
+ i++;
78
+ continue;
79
+ }
80
+ // Règle avec bloc { }
81
+ const openMatch = line.match(RE_SELECTOR_OPEN);
82
+ if (openMatch) {
83
+ const selector = openMatch[1].trim();
84
+ const rawLines = [lines[i]];
85
+ const properties = [];
86
+ i++;
87
+ let depth = 1;
88
+ while (i < lines.length && depth > 0) {
89
+ const inner = lines[i];
90
+ const trimmed = inner.trim();
91
+ rawLines.push(inner);
92
+ if (trimmed.endsWith("{"))
93
+ depth++;
94
+ else if (RE_CLOSE_BRACE.test(trimmed))
95
+ depth--;
96
+ if (depth > 0)
97
+ properties.push(inner);
98
+ i++;
99
+ }
100
+ const isAtRule = selector.startsWith("@");
101
+ rules.push({
102
+ selector,
103
+ properties,
104
+ rawLines,
105
+ leadingComments: [],
106
+ kind: isAtRule ? "at-rule" : "rule",
107
+ });
108
+ continue;
109
+ }
110
+ // Ligne orpheline (propriété hors bloc, variable, etc.)
111
+ rules.push({
112
+ selector: line,
113
+ properties: [],
114
+ rawLines: [lines[i]],
115
+ leadingComments: [],
116
+ kind: "rule",
117
+ });
118
+ i++;
119
+ }
120
+ return rules;
121
+ }
122
+ /**
123
+ * Compare deux tableaux de strings pour égalité.
124
+ */
125
+ function linesEqual(a, b) {
126
+ return a.length === b.length && a.every((l, i) => l === b[i]);
127
+ }
128
+ /**
129
+ * Vérifie qu'un tableau de lignes de propriétés contient uniquement des
130
+ * déclarations CSS valides (prop: value) ou des commentaires/blancs/règles imbriquées.
131
+ * Retourne false uniquement si une ligne n'est ni une déclaration, ni un commentaire,
132
+ * ni une règle imbriquée (un bloc SCSS `selector { ... }`).
133
+ */
134
+ function hasValidCssProperties(propLines) {
135
+ let depth = 0;
136
+ for (const line of propLines) {
137
+ const t = line.trim();
138
+ if (!t || RE_COMMENT_LINE.test(t) || RE_BLANK.test(t))
139
+ continue;
140
+ if (t.endsWith("{")) {
141
+ depth++;
142
+ continue;
143
+ }
144
+ if (t === "}") {
145
+ depth--;
146
+ continue;
147
+ }
148
+ if (depth > 0)
149
+ continue; // Inside a nested block — accepted
150
+ if (!t.includes(":"))
151
+ return false;
152
+ }
153
+ return true;
154
+ }
155
+ /**
156
+ * Vérifie si un bloc de propriétés contient des sélecteurs imbriqués (SCSS).
157
+ */
158
+ function hasNestedSelectors(propLines) {
159
+ return propLines.some((l) => {
160
+ const t = l.trim();
161
+ return t.endsWith("{") && !t.startsWith("@") && !t.includes(":");
162
+ });
163
+ }
164
+ /**
165
+ * Découpe les lignes de propriétés en déclarations plates et blocs imbriqués.
166
+ * Supporte un seul niveau de nesting.
167
+ */
168
+ function splitProperties(propLines) {
169
+ const flatDecls = [];
170
+ const nested = new Map();
171
+ let i = 0;
172
+ while (i < propLines.length) {
173
+ const line = propLines[i];
174
+ const t = line.trim();
175
+ const indent = line.match(/^(\s*)/)?.[1] ?? "";
176
+ // Nested selector block: ` .child {`
177
+ if (t.endsWith("{") && !t.startsWith("@") && !t.includes(":")) {
178
+ const selector = t.slice(0, -1).trim();
179
+ const rawLines = [line];
180
+ const innerLines = [];
181
+ i++;
182
+ let depth = 1;
183
+ while (i < propLines.length && depth > 0) {
184
+ const inner = propLines[i];
185
+ rawLines.push(inner);
186
+ const it = inner.trim();
187
+ if (it.endsWith("{"))
188
+ depth++;
189
+ else if (it === "}") {
190
+ depth--;
191
+ if (depth === 0) {
192
+ i++;
193
+ break;
194
+ }
195
+ }
196
+ if (depth > 0)
197
+ innerLines.push(inner);
198
+ i++;
199
+ }
200
+ nested.set(selector, { selector, innerLines, rawLines, indent });
201
+ continue;
202
+ }
203
+ if (t)
204
+ flatDecls.push(line);
205
+ i++;
206
+ }
207
+ return { flatDecls, nested };
208
+ }
209
+ /**
210
+ * Fusionne les propriétés CSS avec support pour les sélecteurs imbriqués SCSS (un niveau).
211
+ * Si aucun sélecteur imbriqué n'est détecté, délègue à `mergeCssProperties`.
212
+ */
213
+ function mergeWithNestedSelectors(base, ours, theirs) {
214
+ if (!hasNestedSelectors(ours) && !hasNestedSelectors(theirs)) {
215
+ return mergeCssProperties(base, ours, theirs);
216
+ }
217
+ const { flatDecls: baseFlat, nested: baseNested } = splitProperties(base);
218
+ const { flatDecls: oursFlat, nested: oursNested } = splitProperties(ours);
219
+ const { flatDecls: theirsFlat, nested: theirsNested } = splitProperties(theirs);
220
+ // Merge flat declarations
221
+ const mergedFlat = mergeCssProperties(baseFlat, oursFlat, theirsFlat);
222
+ if (mergedFlat === null)
223
+ return null;
224
+ // Merge nested blocks by selector (union)
225
+ const mergedNested = [];
226
+ const seen = new Set();
227
+ for (const [sel, oursBlock] of oursNested) {
228
+ seen.add(sel);
229
+ const theirsBlock = theirsNested.get(sel);
230
+ const baseBlock = baseNested.get(sel);
231
+ if (!theirsBlock) {
232
+ mergedNested.push(...oursBlock.rawLines);
233
+ continue;
234
+ }
235
+ // Both sides have this nested selector
236
+ if (linesEqual(oursBlock.innerLines, theirsBlock.innerLines)) {
237
+ mergedNested.push(...oursBlock.rawLines);
238
+ continue;
239
+ }
240
+ // Try to merge the nested block's properties
241
+ const mergedInner = mergeCssProperties(baseBlock?.innerLines ?? [], oursBlock.innerLines, theirsBlock.innerLines);
242
+ if (mergedInner === null)
243
+ return null;
244
+ const ind = oursBlock.indent;
245
+ mergedNested.push(`${ind}${sel} {`);
246
+ mergedNested.push(...mergedInner);
247
+ mergedNested.push(`${ind}}`);
248
+ }
249
+ // Nested selectors only in theirs
250
+ for (const [sel, theirsBlock] of theirsNested) {
251
+ if (!seen.has(sel)) {
252
+ mergedNested.push(...theirsBlock.rawLines);
253
+ }
254
+ }
255
+ return [...mergedFlat, ...mergedNested];
256
+ }
257
+ /**
258
+ * Fusionne deux blocs de propriétés CSS du même sélecteur.
259
+ * Stratégie : union des propriétés. Si une propriété est modifiée des deux côtés
260
+ * avec des valeurs différentes → conflit non résolvable.
261
+ *
262
+ * Retourne null si les propriétés ne sont pas du CSS valide (pas de `:` dans les lignes).
263
+ */
264
+ function mergeCssProperties(base, ours, theirs) {
265
+ // Validation : rejeter si les propriétés ne ressemblent pas à du CSS
266
+ if (!hasValidCssProperties(ours) || !hasValidCssProperties(theirs)) {
267
+ return null;
268
+ }
269
+ // Parser les propriétés en Map { prop -> value }
270
+ function parseProps(propLines) {
271
+ const map = new Map();
272
+ for (const line of propLines) {
273
+ const t = line.trim();
274
+ if (!t || RE_COMMENT_LINE.test(t) || RE_BLANK.test(t))
275
+ continue;
276
+ const colon = t.indexOf(":");
277
+ if (colon === -1)
278
+ continue;
279
+ const prop = t.slice(0, colon).trim();
280
+ const val = t.slice(colon + 1).trim().replace(/;$/, "").trim();
281
+ map.set(prop, val);
282
+ }
283
+ return map;
284
+ }
285
+ // Détecter l'indentation du bloc
286
+ const indent = (ours.find((l) => l.trim() && !RE_COMMENT_LINE.test(l.trim())) ?? " ").match(/^(\s*)/)?.[1] ?? " ";
287
+ const baseMap = parseProps(base);
288
+ const oursMap = parseProps(ours);
289
+ const theirsMap = parseProps(theirs);
290
+ // Toutes les propriétés
291
+ const allProps = new Set([...baseMap.keys(), ...oursMap.keys(), ...theirsMap.keys()]);
292
+ const result = [];
293
+ for (const prop of allProps) {
294
+ const baseVal = baseMap.get(prop);
295
+ const oursVal = oursMap.get(prop);
296
+ const theirsVal = theirsMap.get(prop);
297
+ // Absent de base → ajout
298
+ if (baseVal === undefined) {
299
+ if (oursVal !== undefined && theirsVal !== undefined) {
300
+ if (oursVal === theirsVal) {
301
+ result.push(`${indent}${prop}: ${oursVal};`);
302
+ }
303
+ else {
304
+ return null; // Conflit
305
+ }
306
+ }
307
+ else if (oursVal !== undefined) {
308
+ result.push(`${indent}${prop}: ${oursVal};`);
309
+ }
310
+ else if (theirsVal !== undefined) {
311
+ result.push(`${indent}${prop}: ${theirsVal};`);
312
+ }
313
+ continue;
314
+ }
315
+ // Présent dans base
316
+ const oursChanged = oursVal !== undefined ? oursVal !== baseVal : true;
317
+ const theirsChanged = theirsVal !== undefined ? theirsVal !== baseVal : true;
318
+ if (!oursChanged && !theirsChanged) {
319
+ result.push(`${indent}${prop}: ${baseVal};`);
320
+ }
321
+ else if (oursVal === theirsVal) {
322
+ result.push(`${indent}${prop}: ${oursVal};`);
323
+ }
324
+ else if (!oursChanged) {
325
+ result.push(`${indent}${prop}: ${theirsVal};`);
326
+ }
327
+ else if (!theirsChanged) {
328
+ result.push(`${indent}${prop}: ${oursVal};`);
329
+ }
330
+ else if (oursVal === undefined) {
331
+ if (!theirsChanged) {
332
+ // Ours supprimé, theirs inchangé → supprimer
333
+ }
334
+ else {
335
+ return null; // Ours supprimé, theirs modifié
336
+ }
337
+ }
338
+ else if (theirsVal === undefined) {
339
+ if (!oursChanged) {
340
+ // Theirs supprimé, ours inchangé → supprimer
341
+ }
342
+ else {
343
+ return null; // Theirs supprimé, ours modifié
344
+ }
345
+ }
346
+ else {
347
+ return null; // Valeurs différentes des deux côtés
348
+ }
349
+ }
350
+ return result;
351
+ }
352
+ /**
353
+ * Tente de résoudre un conflit CSS/SCSS en fusionnant règle par règle.
354
+ *
355
+ * @param baseLines - Lignes de la version base
356
+ * @param oursLines - Lignes de la version ours
357
+ * @param theirsLines - Lignes de la version theirs
358
+ */
359
+ export function tryResolveCssConflict(baseLines, oursLines, theirsLines) {
360
+ const baseRules = parseCssRules(baseLines);
361
+ const oursRules = parseCssRules(oursLines);
362
+ const theirsRules = parseCssRules(theirsLines);
363
+ // Filtrer les règles significatives (pas blank/comment) pour l'index
364
+ const baseMap = new Map();
365
+ const oursMap = new Map();
366
+ const theirsMap = new Map();
367
+ for (const r of baseRules)
368
+ if (r.selector)
369
+ baseMap.set(r.selector, r);
370
+ for (const r of oursRules)
371
+ if (r.selector)
372
+ oursMap.set(r.selector, r);
373
+ for (const r of theirsRules)
374
+ if (r.selector)
375
+ theirsMap.set(r.selector, r);
376
+ // Ordre : ours d'abord, puis nouvelles règles de theirs
377
+ const oursOrder = oursRules.map((r) => r.selector).filter(Boolean);
378
+ const theirsOrder = theirsRules.map((r) => r.selector).filter(Boolean);
379
+ const allKeys = [...oursOrder];
380
+ for (const k of theirsOrder) {
381
+ if (!allKeys.includes(k))
382
+ allKeys.push(k);
383
+ }
384
+ // Inclure aussi les blancs et commentaires de ours dans le résultat
385
+ const resultLines = [];
386
+ let resolvedRules = 0;
387
+ let unresolvedRules = 0;
388
+ // Ajouter les blancs/commentaires de ours qui précèdent les règles
389
+ for (const rule of oursRules) {
390
+ if (rule.kind === "blank" || rule.kind === "comment") {
391
+ resultLines.push(...rule.rawLines);
392
+ }
393
+ else {
394
+ break;
395
+ }
396
+ }
397
+ for (const selector of allKeys) {
398
+ if (!selector)
399
+ continue;
400
+ const base = baseMap.get(selector);
401
+ const ours = oursMap.get(selector);
402
+ const theirs = theirsMap.get(selector);
403
+ if (!ours && !theirs)
404
+ continue;
405
+ // Absent de base → ajout
406
+ if (!base) {
407
+ if (ours && theirs) {
408
+ if (linesEqual(ours.rawLines, theirs.rawLines)) {
409
+ resultLines.push(...ours.rawLines);
410
+ resolvedRules++;
411
+ }
412
+ else if (ours.kind === "rule" && theirs.kind === "rule") {
413
+ // Tenter fusion des propriétés (avec support SCSS one-level nesting)
414
+ const merged = mergeWithNestedSelectors([], ours.properties, theirs.properties);
415
+ if (merged !== null) {
416
+ const indent = ours.rawLines[0].match(/^(\s*)/)?.[1] ?? "";
417
+ resultLines.push(`${indent}${selector} {`);
418
+ resultLines.push(...merged);
419
+ resultLines.push(`${indent}}`);
420
+ resolvedRules++;
421
+ }
422
+ else {
423
+ unresolvedRules++;
424
+ return {
425
+ mergedLines: null,
426
+ reason: `Conflit CSS sur le sélecteur '${selector}' — propriétés incompatibles.`,
427
+ resolvedRules,
428
+ unresolvedRules,
429
+ };
430
+ }
431
+ }
432
+ else {
433
+ unresolvedRules++;
434
+ return {
435
+ mergedLines: null,
436
+ reason: `Conflit CSS sur '${selector}' — ajouté différemment des deux côtés.`,
437
+ resolvedRules,
438
+ unresolvedRules,
439
+ };
440
+ }
441
+ }
442
+ else if (ours) {
443
+ resultLines.push(...ours.rawLines);
444
+ resolvedRules++;
445
+ }
446
+ else if (theirs) {
447
+ resultLines.push(...theirs.rawLines);
448
+ resolvedRules++;
449
+ }
450
+ continue;
451
+ }
452
+ const oursChanged = ours ? !linesEqual(base.rawLines, ours.rawLines) : true;
453
+ const theirsChanged = theirs ? !linesEqual(base.rawLines, theirs.rawLines) : true;
454
+ if (!ours && !theirs) {
455
+ resolvedRules++;
456
+ continue;
457
+ }
458
+ if (!ours) {
459
+ if (!theirsChanged) {
460
+ resolvedRules++;
461
+ }
462
+ else {
463
+ unresolvedRules++;
464
+ return { mergedLines: null, reason: `Conflit CSS sur '${selector}' — ours supprimé, theirs modifié.`, resolvedRules, unresolvedRules };
465
+ }
466
+ continue;
467
+ }
468
+ if (!theirs) {
469
+ if (!oursChanged) {
470
+ resolvedRules++;
471
+ }
472
+ else {
473
+ unresolvedRules++;
474
+ return { mergedLines: null, reason: `Conflit CSS sur '${selector}' — theirs supprimé, ours modifié.`, resolvedRules, unresolvedRules };
475
+ }
476
+ continue;
477
+ }
478
+ if (!oursChanged && !theirsChanged) {
479
+ resultLines.push(...base.rawLines);
480
+ resolvedRules++;
481
+ }
482
+ else if (linesEqual(ours.rawLines, theirs.rawLines)) {
483
+ resultLines.push(...ours.rawLines);
484
+ resolvedRules++;
485
+ }
486
+ else if (!oursChanged) {
487
+ resultLines.push(...theirs.rawLines);
488
+ resolvedRules++;
489
+ }
490
+ else if (!theirsChanged) {
491
+ resultLines.push(...ours.rawLines);
492
+ resolvedRules++;
493
+ }
494
+ else if (ours.kind === "rule" && theirs.kind === "rule") {
495
+ // Les deux ont modifié le même sélecteur → fusion des propriétés (avec SCSS one-level nesting)
496
+ const merged = mergeWithNestedSelectors(base.properties, ours.properties, theirs.properties);
497
+ if (merged !== null) {
498
+ const indent = ours.rawLines[0].match(/^(\s*)/)?.[1] ?? "";
499
+ resultLines.push(`${indent}${selector} {`);
500
+ resultLines.push(...merged);
501
+ resultLines.push(`${indent}}`);
502
+ resolvedRules++;
503
+ }
504
+ else {
505
+ unresolvedRules++;
506
+ return {
507
+ mergedLines: null,
508
+ reason: `Conflit CSS sur le sélecteur '${selector}' — propriétés modifiées incompatibles.`,
509
+ resolvedRules,
510
+ unresolvedRules,
511
+ };
512
+ }
513
+ }
514
+ else {
515
+ unresolvedRules++;
516
+ return {
517
+ mergedLines: null,
518
+ reason: `Conflit CSS sur '${selector}' — at-rules modifiées des deux côtés.`,
519
+ resolvedRules,
520
+ unresolvedRules,
521
+ };
522
+ }
523
+ }
524
+ return {
525
+ mergedLines: resultLines,
526
+ reason: `Fusion CSS réussie : ${resolvedRules} règle(s) fusionnée(s).`,
527
+ resolvedRules,
528
+ unresolvedRules,
529
+ };
530
+ }
531
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/resolvers/css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAkBH,6DAA6D;AAE7D,MAAM,gBAAgB,GAAG,aAAa,CAAC;AACvC,MAAM,YAAY,GAAO,aAAa,CAAC;AACvC,MAAM,cAAc,GAAK,SAAS,CAAC;AACnC,MAAM,WAAW,GAAQ,8BAA8B,CAAC;AACxD,MAAM,eAAe,GAAI,YAAY,CAAC;AACtC,MAAM,QAAQ,GAAW,OAAO,CAAC;AAEjC;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7B,eAAe;QACf,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,eAAe,EAAE,EAAE;gBACnB,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YACH,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,+CAA+C;QAC/C,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,kDAAkD;YAClD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACrG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC,EAAE,CAAC;YACN,CAAC;YACD,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,YAAY;gBACtB,eAAe,EAAE,YAAY;gBAC7B,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,gCAAgC;QAChC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,eAAe,EAAE,EAAE;gBACnB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YACH,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,sBAAsB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,CAAC,EAAE,CAAC;YAEJ,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAErB,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,KAAK,EAAE,CAAC;qBAC9B,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;oBAAE,KAAK,EAAE,CAAC;gBAE/C,IAAI,KAAK,GAAG,CAAC;oBAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC,EAAE,CAAC;YACN,CAAC;YAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ;gBACR,UAAU;gBACV,QAAQ;gBACR,eAAe,EAAE,EAAE;gBACnB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;aACpC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,wDAAwD;QACxD,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,eAAe,EAAE,EAAE;YACnB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,CAAC,EAAE,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAgBD;;GAEG;AACH,SAAS,UAAU,CAAC,CAAW,EAAE,CAAW;IAC1C,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,SAAmB;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,SAAS;QAChE,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC;YAAE,SAAS,CAAC,mCAAmC;QAC5D,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAWD;;GAEG;AACH,SAAS,kBAAkB,CAAC,SAAmB;IAC7C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,SAAmB;IAI1C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/C,sCAAsC;QACtC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAa,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,CAAC,EAAE,CAAC;YACJ,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBACxB,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,KAAK,EAAE,CAAC;qBACzB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;oBACpB,KAAK,EAAE,CAAC;oBACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBAAC,CAAC,EAAE,CAAC;wBAAC,MAAM;oBAAC,CAAC;gBAClC,CAAC;gBACD,IAAI,KAAK,GAAG,CAAC;oBAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC,EAAE,CAAC;YACN,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,EAAE,CAAC;IACN,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAC/B,IAAc,EACd,IAAc,EACd,MAAgB;IAEhB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7D,OAAO,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAK,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEhF,0BAA0B;IAC1B,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtE,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAErC,0CAA0C;IAC1C,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAK,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QAED,uCAAuC;QACvC,IAAI,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QAED,6CAA6C;QAC7C,MAAM,WAAW,GAAG,kBAAkB,CACpC,SAAS,EAAE,UAAU,IAAI,EAAE,EAC3B,SAAS,CAAC,UAAU,EACpB,WAAW,CAAC,UAAU,CACvB,CAAC;QACF,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAEtC,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QACpC,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAClC,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,kCAAkC;IAClC,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,YAAY,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CACzB,IAAc,EACd,IAAc,EACd,MAAgB;IAEhB,qEAAqE;IACrE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACjD,SAAS,UAAU,CAAC,SAAmB;QACrC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,SAAS;YAChE,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,SAAS;YAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,GAAG,GAAI,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,iCAAiC;IACjC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAEpH,MAAM,OAAO,GAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,OAAO,GAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAErC,wBAAwB;IACxB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEtC,yBAAyB;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBACrD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAC,CAAC,UAAU;gBACzB,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;YAC/C,CAAC;iBAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,SAAS,GAAG,CAAC,CAAC;YACjD,CAAC;YACD,SAAS;QACX,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAAK,OAAO,KAAO,SAAS,CAAC,CAAC,CAAC,OAAO,KAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7E,MAAM,aAAa,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7E,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,SAAS,GAAG,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,6CAA6C;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,CAAC,gCAAgC;YAC/C,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,6CAA6C;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,CAAC,gCAAgC;YAC/C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,CAAC,qCAAqC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAmB,EACnB,SAAmB,EACnB,WAAqB;IAErB,MAAM,SAAS,GAAK,aAAa,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAK,aAAa,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAE/C,qEAAqE;IACrE,MAAM,OAAO,GAAK,IAAI,GAAG,EAAmB,CAAC;IAC7C,MAAM,OAAO,GAAK,IAAI,GAAG,EAAmB,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE7C,KAAK,MAAM,CAAC,IAAI,SAAS;QAAI,IAAI,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxE,KAAK,MAAM,CAAC,IAAI,SAAS;QAAI,IAAI,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxE,KAAK,MAAM,CAAC,IAAI,WAAW;QAAE,IAAI,CAAC,CAAC,QAAQ;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAE1E,wDAAwD;IACxD,MAAM,SAAS,GAAK,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,oEAAoE;IACpE,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,mEAAmE;IACnE,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,IAAI,GAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,GAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;YAAE,SAAS;QAE/B,yBAAyB;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/C,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACnC,aAAa,EAAE,CAAC;gBAClB,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1D,qEAAqE;oBACrE,MAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;oBAChF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;wBACpB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC3D,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,IAAI,CAAC,CAAC;wBAC3C,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;wBAC5B,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;wBAC/B,aAAa,EAAE,CAAC;oBAClB,CAAC;yBAAM,CAAC;wBACN,eAAe,EAAE,CAAC;wBAClB,OAAO;4BACL,WAAW,EAAE,IAAI;4BACjB,MAAM,EAAE,iCAAiC,QAAQ,+BAA+B;4BAChF,aAAa;4BACb,eAAe;yBAChB,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,eAAe,EAAE,CAAC;oBAClB,OAAO;wBACL,WAAW,EAAE,IAAI;wBACjB,MAAM,EAAE,oBAAoB,QAAQ,yCAAyC;wBAC7E,aAAa;wBACb,eAAe;qBAChB,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,EAAE,CAAC;gBAChB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnC,aAAa,EAAE,CAAC;YAClB,CAAC;iBAAM,IAAI,MAAM,EAAE,CAAC;gBAClB,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACrC,aAAa,EAAE,CAAC;YAClB,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAK,IAAI,CAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAG,CAAC,CAAC,IAAI,CAAC;QAClF,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAElF,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACrB,aAAa,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,aAAa,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,eAAe,EAAE,CAAC;gBAClB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,QAAQ,oCAAoC,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC;YACzI,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,aAAa,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,eAAe,EAAE,CAAC;gBAClB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,QAAQ,oCAAoC,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC;YACzI,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,aAAa,EAAE,CAAC;QAClB,CAAC;aAAM,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtD,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,aAAa,EAAE,CAAC;QAClB,CAAC;aAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACrC,aAAa,EAAE,CAAC;QAClB,CAAC;aAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,aAAa,EAAE,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1D,+FAA+F;YAC/F,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAC7F,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3D,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,IAAI,CAAC,CAAC;gBAC3C,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;gBAC5B,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;gBAC/B,aAAa,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,eAAe,EAAE,CAAC;gBAClB,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,MAAM,EAAE,iCAAiC,QAAQ,yCAAyC;oBAC1F,aAAa;oBACb,eAAe;iBAChB,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,eAAe,EAAE,CAAC;YAClB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,oBAAoB,QAAQ,wCAAwC;gBAC5E,aAAa;gBACb,eAAe;aAChB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW,EAAE,WAAW;QACxB,MAAM,EAAE,wBAAwB,aAAa,yBAAyB;QACtE,aAAa;QACb,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * GitWand — Dispatcher de résolveurs par format
3
+ *
4
+ * Point d'entrée pour la résolution format-aware.
5
+ * Détecte le type de fichier à partir de son chemin et tente une
6
+ * résolution spécialisée avant de tomber en fallback sur le moteur textuel.
7
+ *
8
+ * Architecture :
9
+ *
10
+ * resolver.ts
11
+ * └─ tryFormatAwareResolve(hunk, filePath)
12
+ * ├─ isJsonFile(filePath) → tryResolveJsonConflict()
13
+ * ├─ isMarkdownFile(filePath) → tryResolveMarkdownConflict()
14
+ * ├─ isYamlFile(filePath) → tryResolveYamlConflict()
15
+ * ├─ isImportFile(filePath) → tryResolveImportConflict() (si bloc d'imports)
16
+ * ├─ isVueFile(filePath) → tryResolveVueConflict()
17
+ * ├─ isCssFile(filePath) → tryResolveCssConflict()
18
+ * └─ null → moteur textuel standard (resolver.ts switch)
19
+ *
20
+ * Chaque résolveur spécialisé retourne des lignes résolues ou null
21
+ * (null = le résolveur ne sait pas → fallback).
22
+ *
23
+ * Phase 7.3b — Nouveaux résolveurs :
24
+ * - YAML (.yaml / .yml)
25
+ * - TS/JS imports (.ts / .js / .tsx / .jsx / .mjs / .cjs)
26
+ * - Vue SFC (.vue)
27
+ * - CSS/SCSS/Less (.css / .scss / .less)
28
+ */
29
+ import type { ConflictHunk } from "../types.js";
30
+ /** Vérifie si le fichier est JSON ou JSONC */
31
+ export declare function isJsonFile(filePath: string): boolean;
32
+ /** Vérifie si le fichier est Markdown */
33
+ export declare function isMarkdownFile(filePath: string): boolean;
34
+ /** Vérifie si le fichier est YAML */
35
+ export declare function isYamlFile(filePath: string): boolean;
36
+ /** Vérifie si le fichier est un module TS/JS/JSX/TSX */
37
+ export declare function isJsFile(filePath: string): boolean;
38
+ /** Vérifie si le fichier est un composant Vue SFC */
39
+ export declare function isVueFile(filePath: string): boolean;
40
+ /** Vérifie si le fichier est CSS, SCSS ou Less */
41
+ export declare function isCssFile(filePath: string): boolean;
42
+ /** Vérifie si le fichier est un lockfile npm (package-lock.json) */
43
+ export declare function isNpmLockfile(filePath: string): boolean;
44
+ /** Vérifie si le fichier est un lockfile yarn (yarn.lock) */
45
+ export declare function isYarnLockfile(filePath: string): boolean;
46
+ /** Vérifie si le fichier est un lockfile pnpm (pnpm-lock.yaml) */
47
+ export declare function isPnpmLockfile(filePath: string): boolean;
48
+ /** Vérifie si le fichier est un lockfile quelconque */
49
+ export declare function isLockfile(filePath: string): boolean;
50
+ /** Vérifie si le fichier est un Cargo.toml ou Cargo.lock */
51
+ export declare function isCargoFile(filePath: string): boolean;
52
+ /** Vérifie si le fichier est un .env, .env.*, ou *.env */
53
+ export declare function isDotenvFile(filePath: string): boolean;
54
+ /** Vérifie si le fichier est un Dockerfile */
55
+ export declare function isDockerfile(filePath: string): boolean;
56
+ export interface FormatResolveResult {
57
+ /** Lignes résolues, ou null si le résolveur n'a pas pu résoudre */
58
+ lines: string[] | null;
59
+ /**
60
+ * Raison de la résolution (ou de l'échec).
61
+ * Inclut le nom du résolveur et le détail.
62
+ */
63
+ reason: string;
64
+ /** Résolveur utilisé (pour la trace) */
65
+ resolverUsed: "json" | "markdown" | "yaml" | "imports" | "vue" | "css" | "lockfile-npm" | "lockfile-yarn" | "lockfile-pnpm" | "cargo" | "dotenv" | "dockerfile" | "none";
66
+ }
67
+ /**
68
+ * Tente de résoudre un hunk de conflit avec le résolveur approprié
69
+ * selon le type de fichier.
70
+ *
71
+ * Retourne `lines !== null` si le résolveur a réussi, `null` sinon.
72
+ * Dans tous les cas, `reason` décrit ce qui s'est passé.
73
+ *
74
+ * @param hunk - Le hunk de conflit à résoudre
75
+ * @param filePath - Le chemin du fichier (pour déterminer le résolveur)
76
+ */
77
+ export declare function tryFormatAwareResolve(hunk: ConflictHunk, filePath: string): FormatResolveResult;
78
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/resolvers/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgBhD,8CAA8C;AAC9C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,qDAAqD;AACrD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAID,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;CAC1K;AAID;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,GACf,mBAAmB,CA8QrB"}