@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,577 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { resolve } from "../resolver.js";
3
+ import { tryResolveJsonConflict, stripJsoncComments, } from "../resolvers/json.js";
4
+ import { tryResolveMarkdownConflict, parseSections, extractFrontmatter, } from "../resolvers/markdown.js";
5
+ import { tryFormatAwareResolve, isJsonFile, isMarkdownFile, } from "../resolvers/dispatcher.js";
6
+ // ─── Helpers ──────────────────────────────────────────────
7
+ /** Construit un ConflictHunk minimal pour les tests de dispatch */
8
+ function makeHunk(base, ours, theirs) {
9
+ return {
10
+ baseLines: base,
11
+ oursLines: ours,
12
+ theirsLines: theirs,
13
+ startLine: 1,
14
+ type: "complex",
15
+ confidence: { score: 20, label: "low", dimensions: { typeClassification: 20, dataRisk: 0, scopeImpact: 0, fileFrequency: 0, baseAvailability: 0 }, boosters: [], penalties: [] },
16
+ explanation: "test hunk",
17
+ trace: {
18
+ steps: [{ type: "complex", passed: true, reason: "test" }],
19
+ selected: "complex",
20
+ summary: "test",
21
+ hasBase: base.length > 0,
22
+ },
23
+ };
24
+ }
25
+ // ═══════════════════════════════════════════════════════════════
26
+ // PHASE 7.3 — Résolveur JSON sémantique
27
+ // ═══════════════════════════════════════════════════════════════
28
+ describe("Phase 7.3 — JSON resolver", () => {
29
+ // ── stripJsoncComments ──────────────────────────────────
30
+ describe("stripJsoncComments", () => {
31
+ it("supprime les commentaires // sur une ligne", () => {
32
+ const input = `{
33
+ "name": "test", // mon app
34
+ "version": "1.0.0"
35
+ }`;
36
+ const result = stripJsoncComments(input);
37
+ expect(result).not.toContain("//");
38
+ expect(result).toContain('"name"');
39
+ expect(result).toContain('"version"');
40
+ });
41
+ it("supprime les commentaires /* ... */", () => {
42
+ const input = `{
43
+ /* Configuration principale */
44
+ "debug": false
45
+ }`;
46
+ const result = stripJsoncComments(input);
47
+ expect(result).not.toContain("/*");
48
+ expect(result).toContain('"debug"');
49
+ });
50
+ it("ne touche pas aux URLs dans les chaînes", () => {
51
+ const input = `{"url": "https://example.com/path"}`;
52
+ const result = stripJsoncComments(input);
53
+ expect(result).toContain("https://example.com/path");
54
+ });
55
+ it("retourne la chaîne intacte si pas de commentaires", () => {
56
+ const input = `{"key": "value"}`;
57
+ expect(stripJsoncComments(input)).toBe(input);
58
+ });
59
+ });
60
+ // ── tryResolveJsonConflict ────────────────────────────────
61
+ describe("tryResolveJsonConflict — cas de base", () => {
62
+ it("fusionne deux clés ajoutées indépendamment", () => {
63
+ const base = ['{"version": "1.0.0"}'];
64
+ const ours = ['{"version": "1.0.0", "author": "Alice"}'];
65
+ const theirs = ['{"version": "1.0.0", "license": "MIT"}'];
66
+ const result = tryResolveJsonConflict(base, ours, theirs);
67
+ expect(result.merged).not.toBeNull();
68
+ const merged = JSON.parse(result.merged);
69
+ expect(merged.author).toBe("Alice");
70
+ expect(merged.license).toBe("MIT");
71
+ expect(merged.version).toBe("1.0.0");
72
+ expect(result.resolvedKeys).toBeGreaterThan(0);
73
+ expect(result.unresolvedKeys).toBe(0);
74
+ });
75
+ it("résout le cas same_change : même valeur ajoutée des deux côtés", () => {
76
+ const base = ['{"name": "app"}'];
77
+ const ours = ['{"name": "app", "type": "module"}'];
78
+ const theirs = ['{"name": "app", "type": "module"}'];
79
+ const result = tryResolveJsonConflict(base, ours, theirs);
80
+ expect(result.merged).not.toBeNull();
81
+ const merged = JSON.parse(result.merged);
82
+ expect(merged.type).toBe("module");
83
+ });
84
+ it("résout le cas one_side_change : seul ours a modifié une clé", () => {
85
+ const base = ['{"version": "1.0.0", "port": 3000}'];
86
+ const ours = ['{"version": "2.0.0", "port": 3000}'];
87
+ const theirs = ['{"version": "1.0.0", "port": 4000}'];
88
+ const result = tryResolveJsonConflict(base, ours, theirs);
89
+ expect(result.merged).not.toBeNull();
90
+ const merged = JSON.parse(result.merged);
91
+ expect(merged.version).toBe("2.0.0"); // ours a changé version
92
+ expect(merged.port).toBe(4000); // theirs a changé port
93
+ });
94
+ it("retourne null si les deux côtés ont modifié la même clé différemment", () => {
95
+ const base = ['{"version": "1.0.0"}'];
96
+ const ours = ['{"version": "2.0.0"}'];
97
+ const theirs = ['{"version": "3.0.0"}'];
98
+ const result = tryResolveJsonConflict(base, ours, theirs);
99
+ expect(result.merged).toBeNull();
100
+ expect(result.unresolvedKeys).toBeGreaterThan(0);
101
+ });
102
+ it("résout la suppression d'une clé si l'autre côté n'a pas changé", () => {
103
+ const base = ['{"name": "app", "debug": true}'];
104
+ const ours = ['{"name": "app"}']; // ours a supprimé debug
105
+ const theirs = ['{"name": "app", "debug": true}']; // theirs n'a pas changé
106
+ const result = tryResolveJsonConflict(base, ours, theirs);
107
+ expect(result.merged).not.toBeNull();
108
+ const merged = JSON.parse(result.merged);
109
+ expect(merged.debug).toBeUndefined(); // supprimé
110
+ expect(merged.name).toBe("app");
111
+ });
112
+ it("retourne null si un côté supprime et l'autre modifie la même clé", () => {
113
+ const base = ['{"value": 1}'];
114
+ const ours = ['{}']; // ours a supprimé value
115
+ const theirs = ['{"value": 2}']; // theirs a modifié value
116
+ const result = tryResolveJsonConflict(base, ours, theirs);
117
+ expect(result.merged).toBeNull();
118
+ });
119
+ });
120
+ describe("tryResolveJsonConflict — objets imbriqués", () => {
121
+ it("fusionne récursivement les objets imbriqués", () => {
122
+ const base = [`{
123
+ "scripts": {
124
+ "build": "tsc",
125
+ "test": "jest"
126
+ }
127
+ }`];
128
+ const ours = [`{
129
+ "scripts": {
130
+ "build": "tsc",
131
+ "test": "jest",
132
+ "lint": "eslint ."
133
+ }
134
+ }`];
135
+ const theirs = [`{
136
+ "scripts": {
137
+ "build": "tsc",
138
+ "test": "jest",
139
+ "format": "prettier ."
140
+ }
141
+ }`];
142
+ const result = tryResolveJsonConflict(base, ours, theirs);
143
+ expect(result.merged).not.toBeNull();
144
+ const merged = JSON.parse(result.merged);
145
+ expect(merged.scripts.lint).toBe("eslint .");
146
+ expect(merged.scripts.format).toBe("prettier .");
147
+ expect(merged.scripts.build).toBe("tsc");
148
+ });
149
+ it("retourne null si conflit dans un objet imbriqué", () => {
150
+ const base = ['{"deps": {"foo": "1.0.0"}}'];
151
+ const ours = ['{"deps": {"foo": "2.0.0"}}']; // ours upgraded foo
152
+ const theirs = ['{"deps": {"foo": "3.0.0"}}']; // theirs upgraded foo differently
153
+ const result = tryResolveJsonConflict(base, ours, theirs);
154
+ expect(result.merged).toBeNull();
155
+ });
156
+ });
157
+ describe("tryResolveJsonConflict — base vide (diff2)", () => {
158
+ it("fusionne deux ajouts de clés différentes sans base", () => {
159
+ const base = []; // diff2 sans section base
160
+ const ours = ['{"newFeature": true}'];
161
+ const theirs = ['{"anotherFeature": "yes"}'];
162
+ // Avec base vide, les deux clés sont "ajoutées" → conflit
163
+ // car on ne sait pas distinguer ajout vs modification
164
+ const result = tryResolveJsonConflict(base, ours, theirs);
165
+ // Sans base, les deux côtés ont des clés différentes ajoutées (from empty)
166
+ // → comme les clés sont distinctes, ça devrait merger
167
+ if (result.merged !== null) {
168
+ const merged = JSON.parse(result.merged);
169
+ expect(merged.newFeature).toBe(true);
170
+ expect(merged.anotherFeature).toBe("yes");
171
+ }
172
+ // Sinon (null) → ce test vérifie juste que ça ne plante pas
173
+ expect(result).toBeDefined();
174
+ });
175
+ it("détecte un conflit sur la même clé sans base", () => {
176
+ const base = [];
177
+ const ours = ['{"port": 3000}'];
178
+ const theirs = ['{"port": 4000}'];
179
+ const result = tryResolveJsonConflict(base, ours, theirs);
180
+ expect(result.merged).toBeNull(); // conflit sur "port"
181
+ expect(result.unresolvedKeys).toBeGreaterThan(0);
182
+ });
183
+ });
184
+ describe("tryResolveJsonConflict — JSON mal formé", () => {
185
+ it("retourne null si ours n'est pas un JSON valide", () => {
186
+ const base = ['{"key": "val"}'];
187
+ const ours = ['{ invalid json }'];
188
+ const theirs = ['{"key": "val"}'];
189
+ const result = tryResolveJsonConflict(base, ours, theirs);
190
+ expect(result.merged).toBeNull();
191
+ expect(result.reason).toMatch(/parser ours/i);
192
+ });
193
+ it("retourne null si theirs n'est pas un JSON valide", () => {
194
+ const base = ['{"key": "val"}'];
195
+ const ours = ['{"key": "val2"}'];
196
+ const theirs = ['not json at all'];
197
+ const result = tryResolveJsonConflict(base, ours, theirs);
198
+ expect(result.merged).toBeNull();
199
+ expect(result.reason).toMatch(/parser theirs/i);
200
+ });
201
+ });
202
+ // ── Intégration via resolve() ─────────────────────────────
203
+ describe("Intégration JSON via resolve()", () => {
204
+ it("résout un conflit JSON sémantique marqué complex par le classifieur textuel", () => {
205
+ // Deux branches ajoutent chacune une dépendance différente.
206
+ // Le conflit enveloppe un JSON complet (fichier entier) → le résolveur JSON peut le parser.
207
+ // Note : le résolveur JSON ne fonctionne que si chaque section de conflit est un JSON valide.
208
+ const jsonConflict = `<<<<<<< ours
209
+ {
210
+ "name": "my-app",
211
+ "version": "1.0.0",
212
+ "lodash": "^4.17.0"
213
+ }
214
+ ||||||| base
215
+ {
216
+ "name": "my-app",
217
+ "version": "1.0.0"
218
+ }
219
+ =======
220
+ {
221
+ "name": "my-app",
222
+ "version": "1.0.0",
223
+ "axios": "^1.0.0"
224
+ }
225
+ >>>>>>> theirs`;
226
+ const result = resolve(jsonConflict, "package.json");
227
+ // Le résolveur JSON doit avoir fusionné les deux dépendances
228
+ expect(result.stats.autoResolved).toBe(1);
229
+ expect(result.mergedContent).not.toBeNull();
230
+ const merged = JSON.parse(result.mergedContent);
231
+ expect(merged.lodash).toBeDefined();
232
+ expect(merged.axios).toBeDefined();
233
+ expect(merged.version).toBe("1.0.0");
234
+ });
235
+ it("la raison de résolution mentionne le résolveur json", () => {
236
+ const jsonConflict = `{
237
+ <<<<<<< ours
238
+ "port": 3000,
239
+ "debug": true
240
+ ||||||| base
241
+ "port": 3000
242
+ =======
243
+ "port": 3000,
244
+ "host": "0.0.0.0"
245
+ >>>>>>> theirs
246
+ }`;
247
+ const result = resolve(jsonConflict, "config.json");
248
+ if (result.stats.autoResolved > 0) {
249
+ const res = result.resolutions[0];
250
+ expect(res.resolutionReason).toMatch(/\[json\]/i);
251
+ }
252
+ });
253
+ it("tombe en fallback textuel pour un conflit JSON non résolvable par le résolveur JSON", () => {
254
+ // Les deux côtés changent la même clé scalaire différemment
255
+ const jsonConflict = `{
256
+ "name": "app",
257
+ <<<<<<< ours
258
+ "version": "2.0.0",
259
+ "description": "Version ours"
260
+ ||||||| base
261
+ "version": "1.0.0",
262
+ "description": "Base"
263
+ =======
264
+ "version": "3.0.0",
265
+ "description": "Version theirs"
266
+ >>>>>>> theirs
267
+ }`;
268
+ const result = resolve(jsonConflict, "package.json");
269
+ // Le résolveur JSON ne peut pas résoudre (conflit sur version ET description)
270
+ // Le moteur textuel prendra le relais → complex → non résolu
271
+ expect(result.stats.remaining).toBe(1);
272
+ });
273
+ it("la validation JSON passe sur un conflit JSON résolu sémantiquement", () => {
274
+ const jsonConflict = `{
275
+ "a": 1,
276
+ <<<<<<< ours
277
+ "b": 2,
278
+ "c": 3
279
+ ||||||| base
280
+ "b": 2
281
+ =======
282
+ "b": 2,
283
+ "d": 4
284
+ >>>>>>> theirs
285
+ }`;
286
+ const result = resolve(jsonConflict, "data.json");
287
+ if (result.mergedContent !== null) {
288
+ expect(result.validation.isValid).toBe(true);
289
+ expect(result.validation.syntaxError).toBeNull();
290
+ }
291
+ });
292
+ });
293
+ });
294
+ // ═══════════════════════════════════════════════════════════════
295
+ // PHASE 7.3 — Résolveur Markdown
296
+ // ═══════════════════════════════════════════════════════════════
297
+ describe("Phase 7.3 — Markdown resolver", () => {
298
+ // ── extractFrontmatter ────────────────────────────────────
299
+ describe("extractFrontmatter", () => {
300
+ it("extrait le frontmatter YAML entre ---", () => {
301
+ const lines = [
302
+ "---",
303
+ "title: Mon article",
304
+ "date: 2024-01-01",
305
+ "---",
306
+ "",
307
+ "# Contenu",
308
+ ];
309
+ const { frontmatter, rest } = extractFrontmatter(lines);
310
+ expect(frontmatter).toHaveLength(4);
311
+ expect(frontmatter[0]).toBe("---");
312
+ expect(frontmatter[3]).toBe("---");
313
+ expect(rest).toContain("# Contenu");
314
+ });
315
+ it("retourne un frontmatter vide si pas de ---", () => {
316
+ const lines = ["# Mon titre", "", "Contenu"];
317
+ const { frontmatter, rest } = extractFrontmatter(lines);
318
+ expect(frontmatter).toHaveLength(0);
319
+ expect(rest).toEqual(lines);
320
+ });
321
+ it("gère le fichier vide", () => {
322
+ const { frontmatter, rest } = extractFrontmatter([]);
323
+ expect(frontmatter).toHaveLength(0);
324
+ expect(rest).toHaveLength(0);
325
+ });
326
+ });
327
+ // ── parseSections ─────────────────────────────────────────
328
+ describe("parseSections", () => {
329
+ it("découpe un document Markdown en sections", () => {
330
+ const lines = [
331
+ "Prologue",
332
+ "# Introduction",
333
+ "Contenu intro",
334
+ "## Sous-section",
335
+ "Contenu sous-section",
336
+ "# Conclusion",
337
+ "Fin",
338
+ ];
339
+ const sections = parseSections(lines);
340
+ expect(sections).toHaveLength(4); // prologue + 3 headings
341
+ expect(sections[0].heading).toBeNull(); // prologue
342
+ expect(sections[1].heading).toBe("# Introduction");
343
+ expect(sections[1].level).toBe(1);
344
+ expect(sections[2].heading).toBe("## Sous-section");
345
+ expect(sections[2].level).toBe(2);
346
+ expect(sections[3].heading).toBe("# Conclusion");
347
+ });
348
+ it("gère un document sans prologue", () => {
349
+ const lines = ["# Titre", "Contenu"];
350
+ const sections = parseSections(lines);
351
+ // sections[0] est le prologue vide, sections[1] est le heading
352
+ const nonEmpty = sections.filter((s) => s.heading || s.lines.length > 0);
353
+ expect(nonEmpty.some((s) => s.heading === "# Titre")).toBe(true);
354
+ });
355
+ it("gère un document vide", () => {
356
+ const sections = parseSections([]);
357
+ expect(sections).toHaveLength(1); // prologue vide
358
+ expect(sections[0].heading).toBeNull();
359
+ expect(sections[0].lines).toHaveLength(0);
360
+ });
361
+ });
362
+ // ── tryResolveMarkdownConflict ────────────────────────────
363
+ describe("tryResolveMarkdownConflict — résolution de sections", () => {
364
+ it("accepte ours quand seul ours a modifié une section", () => {
365
+ const base = [
366
+ "# Titre",
367
+ "",
368
+ "## Introduction",
369
+ "Texte original.",
370
+ "",
371
+ "## Conclusion",
372
+ "Fin originale.",
373
+ ];
374
+ const ours = [
375
+ "# Titre",
376
+ "",
377
+ "## Introduction",
378
+ "Texte modifié par ours.",
379
+ "",
380
+ "## Conclusion",
381
+ "Fin originale.",
382
+ ];
383
+ const theirs = [
384
+ "# Titre",
385
+ "",
386
+ "## Introduction",
387
+ "Texte original.",
388
+ "",
389
+ "## Conclusion",
390
+ "Nouvelle fin par theirs.",
391
+ ];
392
+ const result = tryResolveMarkdownConflict(base, ours, theirs);
393
+ expect(result.mergedLines).not.toBeNull();
394
+ const merged = result.mergedLines.join("\n");
395
+ expect(merged).toContain("Texte modifié par ours."); // ours intro
396
+ expect(merged).toContain("Nouvelle fin par theirs."); // theirs conclusion
397
+ expect(result.conflictedSections).toHaveLength(0);
398
+ });
399
+ it("accepte theirs quand seul theirs a ajouté une section", () => {
400
+ const base = ["# Titre", "", "Contenu."];
401
+ const ours = ["# Titre", "", "Contenu."];
402
+ const theirs = ["# Titre", "", "Contenu.", "", "## Nouvelle section", "Contenu ajouté."];
403
+ const result = tryResolveMarkdownConflict(base, ours, theirs);
404
+ expect(result.mergedLines).not.toBeNull();
405
+ const merged = result.mergedLines.join("\n");
406
+ expect(merged).toContain("## Nouvelle section");
407
+ expect(merged).toContain("Contenu ajouté.");
408
+ });
409
+ it("résout le cas same_change : même modification des deux côtés", () => {
410
+ const base = ["# Titre", "Contenu original."];
411
+ const ours = ["# Titre", "Contenu modifié."];
412
+ const theirs = ["# Titre", "Contenu modifié."];
413
+ const result = tryResolveMarkdownConflict(base, ours, theirs);
414
+ expect(result.mergedLines).not.toBeNull();
415
+ expect(result.mergedLines.join("\n")).toContain("Contenu modifié.");
416
+ });
417
+ it("retourne null si les deux côtés ont modifié la même section différemment", () => {
418
+ const base = ["# Titre", "Contenu original."];
419
+ const ours = ["# Titre", "Version ours."];
420
+ const theirs = ["# Titre", "Version theirs."];
421
+ const result = tryResolveMarkdownConflict(base, ours, theirs);
422
+ expect(result.mergedLines).toBeNull();
423
+ expect(result.conflictedSections.length).toBeGreaterThan(0);
424
+ });
425
+ });
426
+ describe("tryResolveMarkdownConflict — frontmatter", () => {
427
+ it("fusionne le frontmatter quand seul un côté l'a modifié", () => {
428
+ const base = [
429
+ "---",
430
+ "title: Titre",
431
+ "---",
432
+ "",
433
+ "# Contenu",
434
+ "Texte.",
435
+ ];
436
+ const ours = [
437
+ "---",
438
+ "title: Titre mis à jour",
439
+ "---",
440
+ "",
441
+ "# Contenu",
442
+ "Texte.",
443
+ ];
444
+ const theirs = [
445
+ "---",
446
+ "title: Titre",
447
+ "---",
448
+ "",
449
+ "# Contenu",
450
+ "Texte modifié.",
451
+ ];
452
+ const result = tryResolveMarkdownConflict(base, ours, theirs);
453
+ expect(result.mergedLines).not.toBeNull();
454
+ const merged = result.mergedLines.join("\n");
455
+ expect(merged).toContain("Titre mis à jour"); // frontmatter de ours
456
+ expect(merged).toContain("Texte modifié."); // contenu de theirs
457
+ });
458
+ });
459
+ // ── Intégration via resolve() ─────────────────────────────
460
+ describe("Intégration Markdown via resolve()", () => {
461
+ it("résout un conflit Markdown avec sections non-overlapping", () => {
462
+ const mdConflict = `# Mon Document
463
+
464
+ ## Introduction
465
+
466
+ Contexte du projet.
467
+
468
+ <<<<<<< ours
469
+ ## Fonctionnalités
470
+
471
+ - Feature A
472
+ - Feature B (nouveau)
473
+ ||||||| base
474
+ ## Fonctionnalités
475
+
476
+ - Feature A
477
+ =======
478
+ ## Fonctionnalités
479
+
480
+ - Feature A
481
+
482
+ ## Déploiement
483
+
484
+ Instructions de déploiement.
485
+ >>>>>>> theirs
486
+
487
+ ## Conclusion
488
+
489
+ Fin du document.`;
490
+ const result = resolve(mdConflict, "README.md");
491
+ // Le conflit doit être résolu (Markdown resolver ou insertion_at_boundary)
492
+ if (result.stats.autoResolved > 0) {
493
+ expect(result.mergedContent).not.toBeNull();
494
+ }
495
+ // Au minimum le test vérifie que ça ne plante pas
496
+ expect(result.stats).toBeDefined();
497
+ });
498
+ });
499
+ });
500
+ // ═══════════════════════════════════════════════════════════════
501
+ // PHASE 7.3 — Dispatcher de format
502
+ // ═══════════════════════════════════════════════════════════════
503
+ describe("Phase 7.3 — Dispatcher de format", () => {
504
+ describe("isJsonFile", () => {
505
+ it("détecte les fichiers .json", () => {
506
+ expect(isJsonFile("package.json")).toBe(true);
507
+ expect(isJsonFile("tsconfig.json")).toBe(true);
508
+ expect(isJsonFile("src/config.json")).toBe(true);
509
+ });
510
+ it("détecte les fichiers .jsonc", () => {
511
+ expect(isJsonFile(".vscode/settings.jsonc")).toBe(true);
512
+ expect(isJsonFile("tsconfig.jsonc")).toBe(true);
513
+ });
514
+ it("ne détecte pas les non-JSON", () => {
515
+ expect(isJsonFile("app.ts")).toBe(false);
516
+ expect(isJsonFile("config.yaml")).toBe(false);
517
+ expect(isJsonFile("README.md")).toBe(false);
518
+ expect(isJsonFile("package-lock.json.bak")).toBe(false);
519
+ });
520
+ });
521
+ describe("isMarkdownFile", () => {
522
+ it("détecte les fichiers .md", () => {
523
+ expect(isMarkdownFile("README.md")).toBe(true);
524
+ expect(isMarkdownFile("docs/guide.md")).toBe(true);
525
+ });
526
+ it("détecte les fichiers .mdx et .markdown", () => {
527
+ expect(isMarkdownFile("docs/page.mdx")).toBe(true);
528
+ expect(isMarkdownFile("CHANGELOG.markdown")).toBe(true);
529
+ });
530
+ it("ne détecte pas les non-Markdown", () => {
531
+ expect(isMarkdownFile("app.ts")).toBe(false);
532
+ expect(isMarkdownFile("config.json")).toBe(false);
533
+ });
534
+ });
535
+ describe("tryFormatAwareResolve", () => {
536
+ it("retourne resolverUsed: 'none' pour les fichiers .ts", () => {
537
+ const hunk = makeHunk(["base"], ["ours"], ["theirs"]);
538
+ const result = tryFormatAwareResolve(hunk, "src/app.ts");
539
+ expect(result.resolverUsed).toBe("none");
540
+ expect(result.lines).toBeNull();
541
+ });
542
+ it("retourne resolverUsed: 'json' pour les fichiers .json", () => {
543
+ const hunk = makeHunk(['{"a": 1}'], ['{"a": 1, "b": 2}'], ['{"a": 1, "c": 3}']);
544
+ const result = tryFormatAwareResolve(hunk, "config.json");
545
+ expect(result.resolverUsed).toBe("json");
546
+ });
547
+ it("retourne resolverUsed: 'markdown' pour les fichiers .md", () => {
548
+ const hunk = makeHunk(["# Section", "Contenu."], ["# Section", "Modifié ours."], ["# Section", "Contenu."]);
549
+ const result = tryFormatAwareResolve(hunk, "README.md");
550
+ expect(result.resolverUsed).toBe("markdown");
551
+ });
552
+ it("retourne lines !== null quand JSON resolver réussit", () => {
553
+ const hunk = makeHunk(['{"x": 1}'], ['{"x": 1, "y": 2}'], ['{"x": 1, "z": 3}']);
554
+ const result = tryFormatAwareResolve(hunk, "data.json");
555
+ expect(result.resolverUsed).toBe("json");
556
+ expect(result.lines).not.toBeNull();
557
+ // Le JSON fusionné doit avoir les deux nouvelles clés
558
+ const merged = JSON.parse(result.lines.join("\n"));
559
+ expect(merged.y).toBe(2);
560
+ expect(merged.z).toBe(3);
561
+ });
562
+ it("retourne lines: null quand JSON resolver échoue", () => {
563
+ // Conflit sur la même clé → non résolvable
564
+ const hunk = makeHunk(['{"v": 1}'], ['{"v": 2}'], ['{"v": 3}']);
565
+ const result = tryFormatAwareResolve(hunk, "settings.json");
566
+ expect(result.resolverUsed).toBe("json");
567
+ expect(result.lines).toBeNull();
568
+ expect(result.reason).toMatch(/\[json\]/i);
569
+ });
570
+ it("la reason mentionne le résolveur utilisé", () => {
571
+ const hunk = makeHunk(['{"a": 1}'], ['{"a": 2}'], ['{"a": 3}']);
572
+ const result = tryFormatAwareResolve(hunk, "app.json");
573
+ expect(result.reason).toMatch(/^\[json\]/);
574
+ });
575
+ });
576
+ });
577
+ //# sourceMappingURL=format-resolvers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-resolvers.test.js","sourceRoot":"","sources":["../../src/__tests__/format-resolvers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=imports-extended.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports-extended.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/imports-extended.test.ts"],"names":[],"mappings":""}