@gitwand/core 2.2.0 → 2.4.1

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 (186) hide show
  1. package/dist/__tests__/corpus.d.ts.map +1 -1
  2. package/dist/__tests__/corpus.js +115 -0
  3. package/dist/__tests__/corpus.js.map +1 -1
  4. package/dist/__tests__/patterns/complex.test.d.ts +9 -0
  5. package/dist/__tests__/patterns/complex.test.d.ts.map +1 -0
  6. package/dist/__tests__/patterns/complex.test.js +198 -0
  7. package/dist/__tests__/patterns/complex.test.js.map +1 -0
  8. package/dist/__tests__/patterns/delete-no-change.test.d.ts +11 -0
  9. package/dist/__tests__/patterns/delete-no-change.test.d.ts.map +1 -0
  10. package/dist/__tests__/patterns/delete-no-change.test.js +178 -0
  11. package/dist/__tests__/patterns/delete-no-change.test.js.map +1 -0
  12. package/dist/__tests__/patterns/non-overlapping.test.d.ts +11 -0
  13. package/dist/__tests__/patterns/non-overlapping.test.d.ts.map +1 -0
  14. package/dist/__tests__/patterns/non-overlapping.test.js +240 -0
  15. package/dist/__tests__/patterns/non-overlapping.test.js.map +1 -0
  16. package/dist/__tests__/patterns/one-side-change.test.d.ts +10 -0
  17. package/dist/__tests__/patterns/one-side-change.test.d.ts.map +1 -0
  18. package/dist/__tests__/patterns/one-side-change.test.js +191 -0
  19. package/dist/__tests__/patterns/one-side-change.test.js.map +1 -0
  20. package/dist/__tests__/patterns/same-change.test.d.ts +9 -0
  21. package/dist/__tests__/patterns/same-change.test.d.ts.map +1 -0
  22. package/dist/__tests__/patterns/same-change.test.js +173 -0
  23. package/dist/__tests__/patterns/same-change.test.js.map +1 -0
  24. package/dist/__tests__/patterns/value-only-change.test.d.ts +11 -0
  25. package/dist/__tests__/patterns/value-only-change.test.d.ts.map +1 -0
  26. package/dist/__tests__/patterns/value-only-change.test.js +159 -0
  27. package/dist/__tests__/patterns/value-only-change.test.js.map +1 -0
  28. package/dist/__tests__/patterns/whitespace-only.test.d.ts +10 -0
  29. package/dist/__tests__/patterns/whitespace-only.test.d.ts.map +1 -0
  30. package/dist/__tests__/patterns/whitespace-only.test.js +177 -0
  31. package/dist/__tests__/patterns/whitespace-only.test.js.map +1 -0
  32. package/dist/__tests__/resolvers/css.test.d.ts +12 -0
  33. package/dist/__tests__/resolvers/css.test.d.ts.map +1 -0
  34. package/dist/__tests__/resolvers/css.test.js +171 -0
  35. package/dist/__tests__/resolvers/css.test.js.map +1 -0
  36. package/dist/__tests__/resolvers/imports.test.d.ts +12 -0
  37. package/dist/__tests__/resolvers/imports.test.d.ts.map +1 -0
  38. package/dist/__tests__/resolvers/imports.test.js +135 -0
  39. package/dist/__tests__/resolvers/imports.test.js.map +1 -0
  40. package/dist/__tests__/resolvers/json.test.d.ts +12 -0
  41. package/dist/__tests__/resolvers/json.test.d.ts.map +1 -0
  42. package/dist/__tests__/resolvers/json.test.js +184 -0
  43. package/dist/__tests__/resolvers/json.test.js.map +1 -0
  44. package/dist/__tests__/resolvers/lockfile-npm.test.d.ts +12 -0
  45. package/dist/__tests__/resolvers/lockfile-npm.test.d.ts.map +1 -0
  46. package/dist/__tests__/resolvers/lockfile-npm.test.js +187 -0
  47. package/dist/__tests__/resolvers/lockfile-npm.test.js.map +1 -0
  48. package/dist/__tests__/resolvers/lockfile-pnpm.test.d.ts +12 -0
  49. package/dist/__tests__/resolvers/lockfile-pnpm.test.d.ts.map +1 -0
  50. package/dist/__tests__/resolvers/lockfile-pnpm.test.js +175 -0
  51. package/dist/__tests__/resolvers/lockfile-pnpm.test.js.map +1 -0
  52. package/dist/__tests__/resolvers/lockfile-yarn.test.d.ts +12 -0
  53. package/dist/__tests__/resolvers/lockfile-yarn.test.d.ts.map +1 -0
  54. package/dist/__tests__/resolvers/lockfile-yarn.test.js +165 -0
  55. package/dist/__tests__/resolvers/lockfile-yarn.test.js.map +1 -0
  56. package/dist/__tests__/resolvers/markdown.test.d.ts +12 -0
  57. package/dist/__tests__/resolvers/markdown.test.d.ts.map +1 -0
  58. package/dist/__tests__/resolvers/markdown.test.js +188 -0
  59. package/dist/__tests__/resolvers/markdown.test.js.map +1 -0
  60. package/dist/__tests__/resolvers/vue.test.d.ts +12 -0
  61. package/dist/__tests__/resolvers/vue.test.d.ts.map +1 -0
  62. package/dist/__tests__/resolvers/vue.test.js +225 -0
  63. package/dist/__tests__/resolvers/vue.test.js.map +1 -0
  64. package/dist/__tests__/resolvers/yaml.test.d.ts +12 -0
  65. package/dist/__tests__/resolvers/yaml.test.d.ts.map +1 -0
  66. package/dist/__tests__/resolvers/yaml.test.js +203 -0
  67. package/dist/__tests__/resolvers/yaml.test.js.map +1 -0
  68. package/dist/__tests__/structural/grandeur-nature.test.d.ts +31 -0
  69. package/dist/__tests__/structural/grandeur-nature.test.d.ts.map +1 -0
  70. package/dist/__tests__/structural/grandeur-nature.test.js +264 -0
  71. package/dist/__tests__/structural/grandeur-nature.test.js.map +1 -0
  72. package/dist/__tests__/structural/languages.test.d.ts +5 -0
  73. package/dist/__tests__/structural/languages.test.d.ts.map +1 -0
  74. package/dist/__tests__/structural/languages.test.js +74 -0
  75. package/dist/__tests__/structural/languages.test.js.map +1 -0
  76. package/dist/__tests__/structural/matching.test.d.ts +6 -0
  77. package/dist/__tests__/structural/matching.test.d.ts.map +1 -0
  78. package/dist/__tests__/structural/matching.test.js +113 -0
  79. package/dist/__tests__/structural/matching.test.js.map +1 -0
  80. package/dist/__tests__/structural/merge.test.d.ts +6 -0
  81. package/dist/__tests__/structural/merge.test.d.ts.map +1 -0
  82. package/dist/__tests__/structural/merge.test.js +117 -0
  83. package/dist/__tests__/structural/merge.test.js.map +1 -0
  84. package/dist/__tests__/structural/reconstruct.test.d.ts +6 -0
  85. package/dist/__tests__/structural/reconstruct.test.d.ts.map +1 -0
  86. package/dist/__tests__/structural/reconstruct.test.js +104 -0
  87. package/dist/__tests__/structural/reconstruct.test.js.map +1 -0
  88. package/dist/__tests__/structural/structural-index.test.d.ts +14 -0
  89. package/dist/__tests__/structural/structural-index.test.d.ts.map +1 -0
  90. package/dist/__tests__/structural/structural-index.test.js +108 -0
  91. package/dist/__tests__/structural/structural-index.test.js.map +1 -0
  92. package/dist/__tests__/v2-core-scenarios.test.d.ts +35 -0
  93. package/dist/__tests__/v2-core-scenarios.test.d.ts.map +1 -0
  94. package/dist/__tests__/v2-core-scenarios.test.js +692 -0
  95. package/dist/__tests__/v2-core-scenarios.test.js.map +1 -0
  96. package/dist/__tests__/validation-parse-tree.test.d.ts +15 -0
  97. package/dist/__tests__/validation-parse-tree.test.d.ts.map +1 -0
  98. package/dist/__tests__/validation-parse-tree.test.js +243 -0
  99. package/dist/__tests__/validation-parse-tree.test.js.map +1 -0
  100. package/dist/config.d.ts +25 -0
  101. package/dist/config.d.ts.map +1 -1
  102. package/dist/config.js +17 -0
  103. package/dist/config.js.map +1 -1
  104. package/dist/diff/index.d.ts.map +1 -1
  105. package/dist/diff/index.js +1 -3
  106. package/dist/diff/index.js.map +1 -1
  107. package/dist/index.d.ts +5 -1
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +5 -1
  110. package/dist/index.js.map +1 -1
  111. package/dist/patterns/utils.d.ts +8 -7
  112. package/dist/patterns/utils.d.ts.map +1 -1
  113. package/dist/patterns/utils.js +13 -12
  114. package/dist/patterns/utils.js.map +1 -1
  115. package/dist/resolver/adapters/strict-node.d.ts +32 -0
  116. package/dist/resolver/adapters/strict-node.d.ts.map +1 -0
  117. package/dist/resolver/adapters/strict-node.js +117 -0
  118. package/dist/resolver/adapters/strict-node.js.map +1 -0
  119. package/dist/resolver/index.d.ts +33 -0
  120. package/dist/resolver/index.d.ts.map +1 -1
  121. package/dist/resolver/index.js +113 -0
  122. package/dist/resolver/index.js.map +1 -1
  123. package/dist/resolver/policy.d.ts.map +1 -1
  124. package/dist/resolver/policy.js +3 -0
  125. package/dist/resolver/policy.js.map +1 -1
  126. package/dist/resolver/validate-parse-tree.d.ts +52 -0
  127. package/dist/resolver/validate-parse-tree.d.ts.map +1 -0
  128. package/dist/resolver/validate-parse-tree.js +87 -0
  129. package/dist/resolver/validate-parse-tree.js.map +1 -0
  130. package/dist/resolver/validate-strict.d.ts +27 -0
  131. package/dist/resolver/validate-strict.d.ts.map +1 -0
  132. package/dist/resolver/validate-strict.js +41 -0
  133. package/dist/resolver/validate-strict.js.map +1 -0
  134. package/dist/resolver/validation.d.ts.map +1 -1
  135. package/dist/resolver/validation.js +15 -1
  136. package/dist/resolver/validation.js.map +1 -1
  137. package/dist/resolvers/dispatcher.d.ts +17 -1
  138. package/dist/resolvers/dispatcher.d.ts.map +1 -1
  139. package/dist/resolvers/dispatcher.js.map +1 -1
  140. package/dist/structural/entities.d.ts +44 -0
  141. package/dist/structural/entities.d.ts.map +1 -0
  142. package/dist/structural/entities.js +315 -0
  143. package/dist/structural/entities.js.map +1 -0
  144. package/dist/structural/index.d.ts +48 -0
  145. package/dist/structural/index.d.ts.map +1 -0
  146. package/dist/structural/index.js +177 -0
  147. package/dist/structural/index.js.map +1 -0
  148. package/dist/structural/matching.d.ts +46 -0
  149. package/dist/structural/matching.d.ts.map +1 -0
  150. package/dist/structural/matching.js +83 -0
  151. package/dist/structural/matching.js.map +1 -0
  152. package/dist/structural/merge.d.ts +45 -0
  153. package/dist/structural/merge.d.ts.map +1 -0
  154. package/dist/structural/merge.js +127 -0
  155. package/dist/structural/merge.js.map +1 -0
  156. package/dist/structural/parsers/adapters/browser.d.ts +22 -0
  157. package/dist/structural/parsers/adapters/browser.d.ts.map +1 -0
  158. package/dist/structural/parsers/adapters/browser.js +27 -0
  159. package/dist/structural/parsers/adapters/browser.js.map +1 -0
  160. package/dist/structural/parsers/adapters/node.d.ts +18 -0
  161. package/dist/structural/parsers/adapters/node.d.ts.map +1 -0
  162. package/dist/structural/parsers/adapters/node.js +42 -0
  163. package/dist/structural/parsers/adapters/node.js.map +1 -0
  164. package/dist/structural/parsers/adapters/tauri.d.ts +26 -0
  165. package/dist/structural/parsers/adapters/tauri.d.ts.map +1 -0
  166. package/dist/structural/parsers/adapters/tauri.js +34 -0
  167. package/dist/structural/parsers/adapters/tauri.js.map +1 -0
  168. package/dist/structural/parsers/grammars/languages.d.ts +32 -0
  169. package/dist/structural/parsers/grammars/languages.d.ts.map +1 -0
  170. package/dist/structural/parsers/grammars/languages.js +73 -0
  171. package/dist/structural/parsers/grammars/languages.js.map +1 -0
  172. package/dist/structural/parsers/grammars/ts.d.ts +26 -0
  173. package/dist/structural/parsers/grammars/ts.d.ts.map +1 -0
  174. package/dist/structural/parsers/grammars/ts.js +46 -0
  175. package/dist/structural/parsers/grammars/ts.js.map +1 -0
  176. package/dist/structural/parsers/loader.d.ts +74 -0
  177. package/dist/structural/parsers/loader.d.ts.map +1 -0
  178. package/dist/structural/parsers/loader.js +181 -0
  179. package/dist/structural/parsers/loader.js.map +1 -0
  180. package/dist/structural/reconstruct.d.ts +28 -0
  181. package/dist/structural/reconstruct.d.ts.map +1 -0
  182. package/dist/structural/reconstruct.js +63 -0
  183. package/dist/structural/reconstruct.js.map +1 -0
  184. package/dist/types.d.ts +60 -3
  185. package/dist/types.d.ts.map +1 -1
  186. package/package.json +16 -2
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Tests du resolver lockfile-pnpm (pnpm-lock.yaml) — GitWand
3
+ *
4
+ * Fixtures :
5
+ * F1 — package ajouté dans `packages:` d'un seul côté
6
+ * F2 — même package, version différente → prefer theirs ou conflit
7
+ * F3 — lockfile minimal
8
+ * F4 — ajout dans `importers:` d'un seul côté
9
+ * F5 — détection du nom `pnpm-lock.yaml` → bon resolver utilisé
10
+ */
11
+ import { describe, it, expect } from "vitest";
12
+ import { resolve } from "../../resolver.js";
13
+ // ─── base lockfile ─────────────────────────────────────────────────────────────
14
+ const baseLock = `lockfileVersion: '9.0'
15
+
16
+ settings:
17
+ autoInstallPeers: true
18
+ excludeLinksFromLockfile: false
19
+
20
+ importers:
21
+ .:
22
+ dependencies:
23
+ vue:
24
+ specifier: ^3.4.0
25
+ version: 3.4.0
26
+
27
+ packages:
28
+
29
+ /vue@3.4.0:
30
+ resolution: {integrity: sha512-vue}
31
+ engines: {node: '>=16.11.0'}
32
+ `;
33
+ // ─── F1 — package ajouté dans packages: d'un seul côté ───────────────────────
34
+ describe("F1 — pnpm-lock.yaml : package ajouté dans packages: d'un seul côté (diff3)", () => {
35
+ const oursLock = baseLock + `
36
+ /axios@1.6.0:
37
+ resolution: {integrity: sha512-axios}
38
+ engines: {node: '>=16'}
39
+ `;
40
+ const input = [
41
+ `<<<<<<< ours`,
42
+ ...oursLock.split("\n"),
43
+ `||||||| base`,
44
+ ...baseLock.split("\n"),
45
+ `=======`,
46
+ ...baseLock.split("\n"),
47
+ `>>>>>>> theirs`,
48
+ ].join("\n");
49
+ it("auto-résout via le resolver lockfile-pnpm", () => {
50
+ const result = resolve(input, "pnpm-lock.yaml");
51
+ expect(result.stats.autoResolved).toBe(1);
52
+ });
53
+ it("le résultat contient le package ajouté", () => {
54
+ const result = resolve(input, "pnpm-lock.yaml");
55
+ expect(result.mergedContent).toContain("axios");
56
+ expect(result.mergedContent).toContain("vue");
57
+ });
58
+ it("la raison mentionne [lockfile-pnpm]", () => {
59
+ const result = resolve(input, "pnpm-lock.yaml");
60
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-pnpm\]/i);
61
+ });
62
+ });
63
+ // ─── F2 — même package, version différente ────────────────────────────────────
64
+ describe("F2 — pnpm-lock.yaml : même package, version différente (diff3)", () => {
65
+ const oursLock = baseLock.replace("3.4.0", "3.4.1").replace("sha512-vue", "sha512-vue-new");
66
+ const theirsLock = baseLock.replace("3.4.0", "3.5.0").replace("sha512-vue", "sha512-vue-theirs");
67
+ const input = [
68
+ `<<<<<<< ours`,
69
+ ...oursLock.split("\n"),
70
+ `||||||| base`,
71
+ ...baseLock.split("\n"),
72
+ `=======`,
73
+ ...theirsLock.split("\n"),
74
+ `>>>>>>> theirs`,
75
+ ].join("\n");
76
+ it("ne lève pas d'exception", () => {
77
+ expect(() => resolve(input, "pnpm-lock.yaml")).not.toThrow();
78
+ });
79
+ it("la raison mentionne [lockfile-pnpm]", () => {
80
+ const result = resolve(input, "pnpm-lock.yaml");
81
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-pnpm\]/i);
82
+ });
83
+ });
84
+ // ─── F3 — lockfile minimal ────────────────────────────────────────────────────
85
+ describe("F3 — pnpm-lock.yaml minimal : ne plante pas", () => {
86
+ const minimal = `lockfileVersion: '9.0'\n\npackages:\n`;
87
+ const input = [
88
+ `<<<<<<< ours`,
89
+ ...minimal.split("\n"),
90
+ `||||||| base`,
91
+ ...minimal.split("\n"),
92
+ `=======`,
93
+ ...minimal.split("\n"),
94
+ `>>>>>>> theirs`,
95
+ ].join("\n");
96
+ it("ne lève pas d'exception", () => {
97
+ expect(() => resolve(input, "pnpm-lock.yaml")).not.toThrow();
98
+ });
99
+ it("produit un résultat avec au moins un hunk", () => {
100
+ const result = resolve(input, "pnpm-lock.yaml");
101
+ expect(result.hunks.length).toBeGreaterThanOrEqual(1);
102
+ });
103
+ });
104
+ // ─── F4 — ajout dans importers: d'un seul côté ───────────────────────────────
105
+ describe("F4 — pnpm-lock.yaml : ajout dans importers: d'un seul côté (diff3)", () => {
106
+ const oursLock = `lockfileVersion: '9.0'
107
+
108
+ settings:
109
+ autoInstallPeers: true
110
+
111
+ importers:
112
+ .:
113
+ dependencies:
114
+ vue:
115
+ specifier: ^3.4.0
116
+ version: 3.4.0
117
+ axios:
118
+ specifier: ^1.6.0
119
+ version: 1.6.0
120
+
121
+ packages:
122
+
123
+ /vue@3.4.0:
124
+ resolution: {integrity: sha512-vue}
125
+
126
+ /axios@1.6.0:
127
+ resolution: {integrity: sha512-axios}
128
+ `;
129
+ const input = [
130
+ `<<<<<<< ours`,
131
+ ...oursLock.split("\n"),
132
+ `||||||| base`,
133
+ ...baseLock.split("\n"),
134
+ `=======`,
135
+ ...baseLock.split("\n"),
136
+ `>>>>>>> theirs`,
137
+ ].join("\n");
138
+ it("auto-résout via le resolver lockfile-pnpm", () => {
139
+ const result = resolve(input, "pnpm-lock.yaml");
140
+ expect(result.stats.autoResolved).toBe(1);
141
+ });
142
+ it("le résultat contient la dépendance ajoutée dans importers", () => {
143
+ const result = resolve(input, "pnpm-lock.yaml");
144
+ expect(result.mergedContent).toContain("axios");
145
+ });
146
+ it("la raison mentionne [lockfile-pnpm]", () => {
147
+ const result = resolve(input, "pnpm-lock.yaml");
148
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-pnpm\]/i);
149
+ });
150
+ });
151
+ // ─── F5 — détection du nom de fichier ────────────────────────────────────────
152
+ describe("F5 — pnpm-lock.yaml : détection du nom de fichier", () => {
153
+ const oursLock = baseLock + `
154
+ /lodash@4.17.21:
155
+ resolution: {integrity: sha512-lodash}
156
+ `;
157
+ const input = [
158
+ `<<<<<<< ours`,
159
+ ...oursLock.split("\n"),
160
+ `||||||| base`,
161
+ ...baseLock.split("\n"),
162
+ `=======`,
163
+ ...baseLock.split("\n"),
164
+ `>>>>>>> theirs`,
165
+ ].join("\n");
166
+ it("le nom pnpm-lock.yaml active le bon resolver", () => {
167
+ const result = resolve(input, "pnpm-lock.yaml");
168
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-pnpm\]/i);
169
+ });
170
+ it("le nom dans un sous-dossier est aussi détecté", () => {
171
+ const result = resolve(input, "packages/core/pnpm-lock.yaml");
172
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-pnpm\]/i);
173
+ });
174
+ });
175
+ //# sourceMappingURL=lockfile-pnpm.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile-pnpm.test.js","sourceRoot":"","sources":["../../../src/__tests__/resolvers/lockfile-pnpm.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Tests du resolver lockfile-yarn (yarn.lock) — GitWand
3
+ *
4
+ * Fixtures :
5
+ * F1 — bloc de package ajouté d'un seul côté
6
+ * F2 — même bloc, version différente → prefer theirs
7
+ * F3 — yarn.lock minimal
8
+ * F4 — deux packages différents ajoutés de chaque côté
9
+ * F5 — détection du nom `yarn.lock` → bon resolver utilisé
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=lockfile-yarn.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile-yarn.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/resolvers/lockfile-yarn.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Tests du resolver lockfile-yarn (yarn.lock) — GitWand
3
+ *
4
+ * Fixtures :
5
+ * F1 — bloc de package ajouté d'un seul côté
6
+ * F2 — même bloc, version différente → prefer theirs
7
+ * F3 — yarn.lock minimal
8
+ * F4 — deux packages différents ajoutés de chaque côté
9
+ * F5 — détection du nom `yarn.lock` → bon resolver utilisé
10
+ */
11
+ import { describe, it, expect } from "vitest";
12
+ import { resolve } from "../../resolver.js";
13
+ // ─── base lockfile ─────────────────────────────────────────────────────────────
14
+ const baseLock = `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
15
+ # yarn lockfile v1
16
+
17
+ react@^18.0.0:
18
+ version "18.2.0"
19
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz"
20
+ integrity sha512-react
21
+
22
+ vue@^3.0.0:
23
+ version "3.4.0"
24
+ resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.0.tgz"
25
+ integrity sha512-vue
26
+ `;
27
+ // ─── F1 — bloc de package ajouté d'un seul côté ──────────────────────────────
28
+ describe("F1 — yarn.lock : bloc de package ajouté d'un seul côté (diff3)", () => {
29
+ const oursLock = baseLock + `
30
+ axios@^1.0.0:
31
+ version "1.6.0"
32
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz"
33
+ integrity sha512-axios
34
+ `;
35
+ const input = [
36
+ `<<<<<<< ours`,
37
+ ...oursLock.split("\n"),
38
+ `||||||| base`,
39
+ ...baseLock.split("\n"),
40
+ `=======`,
41
+ ...baseLock.split("\n"),
42
+ `>>>>>>> theirs`,
43
+ ].join("\n");
44
+ it("auto-résout via le resolver lockfile-yarn", () => {
45
+ const result = resolve(input, "yarn.lock");
46
+ expect(result.stats.autoResolved).toBe(1);
47
+ });
48
+ it("le résultat contient le bloc de package ajouté", () => {
49
+ const result = resolve(input, "yarn.lock");
50
+ expect(result.mergedContent).toContain("axios@^1.0.0:");
51
+ expect(result.mergedContent).toContain("react@^18.0.0:");
52
+ expect(result.mergedContent).toContain("vue@^3.0.0:");
53
+ });
54
+ it("la raison mentionne [lockfile-yarn]", () => {
55
+ const result = resolve(input, "yarn.lock");
56
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-yarn\]/i);
57
+ });
58
+ });
59
+ // ─── F2 — même bloc, version différente ───────────────────────────────────────
60
+ describe("F2 — yarn.lock : même bloc, version différente → prefer theirs (diff3)", () => {
61
+ const oursLock = baseLock.replace('"18.2.0"', '"18.3.0"').replace("sha512-react", "sha512-react-ours");
62
+ const theirsLock = baseLock.replace('"18.2.0"', '"18.3.1"').replace("sha512-react", "sha512-react-theirs");
63
+ const input = [
64
+ `<<<<<<< ours`,
65
+ ...oursLock.split("\n"),
66
+ `||||||| base`,
67
+ ...baseLock.split("\n"),
68
+ `=======`,
69
+ ...theirsLock.split("\n"),
70
+ `>>>>>>> theirs`,
71
+ ].join("\n");
72
+ it("ne lève pas d'exception", () => {
73
+ expect(() => resolve(input, "yarn.lock")).not.toThrow();
74
+ });
75
+ it("la raison mentionne [lockfile-yarn]", () => {
76
+ const result = resolve(input, "yarn.lock");
77
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-yarn\]/i);
78
+ });
79
+ });
80
+ // ─── F3 — yarn.lock minimal ───────────────────────────────────────────────────
81
+ describe("F3 — yarn.lock minimal : ne plante pas", () => {
82
+ const minimal = `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n# yarn lockfile v1\n`;
83
+ const input = [
84
+ `<<<<<<< ours`,
85
+ ...minimal.split("\n"),
86
+ `||||||| base`,
87
+ ...minimal.split("\n"),
88
+ `=======`,
89
+ ...minimal.split("\n"),
90
+ `>>>>>>> theirs`,
91
+ ].join("\n");
92
+ it("ne lève pas d'exception", () => {
93
+ expect(() => resolve(input, "yarn.lock")).not.toThrow();
94
+ });
95
+ it("produit un résultat avec au moins un hunk", () => {
96
+ const result = resolve(input, "yarn.lock");
97
+ expect(result.hunks.length).toBeGreaterThanOrEqual(1);
98
+ });
99
+ });
100
+ // ─── F4 — deux packages différents ajoutés de chaque côté ────────────────────
101
+ describe("F4 — yarn.lock : packages différents ajoutés de chaque côté (diff3)", () => {
102
+ const oursLock = baseLock + `
103
+ lodash@^4.0.0:
104
+ version "4.17.21"
105
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz"
106
+ integrity sha512-lodash
107
+ `;
108
+ const theirsLock = baseLock + `
109
+ date-fns@^3.0.0:
110
+ version "3.0.0"
111
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.0.0.tgz"
112
+ integrity sha512-datefns
113
+ `;
114
+ const input = [
115
+ `<<<<<<< ours`,
116
+ ...oursLock.split("\n"),
117
+ `||||||| base`,
118
+ ...baseLock.split("\n"),
119
+ `=======`,
120
+ ...theirsLock.split("\n"),
121
+ `>>>>>>> theirs`,
122
+ ].join("\n");
123
+ it("auto-résout avec les deux packages", () => {
124
+ const result = resolve(input, "yarn.lock");
125
+ expect(result.stats.autoResolved).toBe(1);
126
+ });
127
+ it("le résultat contient les deux packages ajoutés", () => {
128
+ const result = resolve(input, "yarn.lock");
129
+ expect(result.mergedContent).toContain("lodash@^4.0.0:");
130
+ expect(result.mergedContent).toContain("date-fns@^3.0.0:");
131
+ expect(result.mergedContent).toContain("react@^18.0.0:");
132
+ expect(result.mergedContent).toContain("vue@^3.0.0:");
133
+ });
134
+ it("la raison mentionne [lockfile-yarn]", () => {
135
+ const result = resolve(input, "yarn.lock");
136
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-yarn\]/i);
137
+ });
138
+ });
139
+ // ─── F5 — détection du nom de fichier ────────────────────────────────────────
140
+ describe("F5 — yarn.lock : détection du nom de fichier", () => {
141
+ const oursLock = baseLock + `
142
+ zod@^3.0.0:
143
+ version "3.22.0"
144
+ resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.0.tgz"
145
+ integrity sha512-zod
146
+ `;
147
+ const input = [
148
+ `<<<<<<< ours`,
149
+ ...oursLock.split("\n"),
150
+ `||||||| base`,
151
+ ...baseLock.split("\n"),
152
+ `=======`,
153
+ ...baseLock.split("\n"),
154
+ `>>>>>>> theirs`,
155
+ ].join("\n");
156
+ it("le nom yarn.lock active le bon resolver", () => {
157
+ const result = resolve(input, "yarn.lock");
158
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-yarn\]/i);
159
+ });
160
+ it("le nom dans un sous-dossier est aussi détecté", () => {
161
+ const result = resolve(input, "apps/desktop/yarn.lock");
162
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-yarn\]/i);
163
+ });
164
+ });
165
+ //# sourceMappingURL=lockfile-yarn.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile-yarn.test.js","sourceRoot":"","sources":["../../../src/__tests__/resolvers/lockfile-yarn.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,kFAAkF;AAElF,MAAM,QAAQ,GAAG;;;;;;;;;;;;CAYhB,CAAC;AAEF,gFAAgF;AAEhF,QAAQ,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC9E,MAAM,QAAQ,GAAG,QAAQ,GAAG;;;;;CAK7B,CAAC;IAEA,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,cAAc;QACd,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,SAAS;QACT,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,wEAAwE,EAAE,GAAG,EAAE;IACtF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;IAE3G,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,cAAc;QACd,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,SAAS;QACT,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,MAAM,OAAO,GAAG,wFAAwF,CAAC;IAEzG,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QACtB,cAAc;QACd,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QACtB,SAAS;QACT,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QACtB,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,QAAQ,CAAC,qEAAqE,EAAE,GAAG,EAAE;IACnF,MAAM,QAAQ,GAAG,QAAQ,GAAG;;;;;CAK7B,CAAC;IAEA,MAAM,UAAU,GAAG,QAAQ,GAAG;;;;;CAK/B,CAAC;IAEA,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,cAAc;QACd,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,SAAS;QACT,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG;;;;;CAK7B,CAAC;IAEA,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,cAAc;QACd,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,SAAS;QACT,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Tests du resolver Markdown (GitWand)
3
+ *
4
+ * Fixtures :
5
+ * F1 — section ajoutée d'un seul côté
6
+ * F2 — même section modifiée des deux côtés → conflit ou fallback
7
+ * F3 — Markdown minimal (texte sans heading)
8
+ * F4 — README avec section ## Features ajoutée d'un côté
9
+ * F5 — CHANGELOG avec entrée de version ajoutée
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=markdown.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/resolvers/markdown.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Tests du resolver Markdown (GitWand)
3
+ *
4
+ * Fixtures :
5
+ * F1 — section ajoutée d'un seul côté
6
+ * F2 — même section modifiée des deux côtés → conflit ou fallback
7
+ * F3 — Markdown minimal (texte sans heading)
8
+ * F4 — README avec section ## Features ajoutée d'un côté
9
+ * F5 — CHANGELOG avec entrée de version ajoutée
10
+ */
11
+ import { describe, it, expect } from "vitest";
12
+ import { resolve } from "../../resolver.js";
13
+ // ─── F1 — section ajoutée d'un seul côté ─────────────────────────────────────
14
+ describe("F1 — Markdown : section ajoutée d'un seul côté (diff3)", () => {
15
+ const input = [
16
+ `<<<<<<< ours`,
17
+ `# My Project`,
18
+ ``,
19
+ `## Introduction`,
20
+ ``,
21
+ `This is my project.`,
22
+ ``,
23
+ `## Installation`,
24
+ ``,
25
+ `Run \`npm install\`.`,
26
+ `||||||| base`,
27
+ `# My Project`,
28
+ ``,
29
+ `## Introduction`,
30
+ ``,
31
+ `This is my project.`,
32
+ `=======`,
33
+ `# My Project`,
34
+ ``,
35
+ `## Introduction`,
36
+ ``,
37
+ `This is my project.`,
38
+ `>>>>>>> theirs`,
39
+ ].join("\n");
40
+ it("auto-résout via le resolver markdown", () => {
41
+ const result = resolve(input, "README.md");
42
+ expect(result.stats.autoResolved).toBe(1);
43
+ });
44
+ it("le résultat contient la section ajoutée", () => {
45
+ const result = resolve(input, "README.md");
46
+ expect(result.mergedContent).toContain("## Installation");
47
+ });
48
+ it("la raison mentionne [markdown]", () => {
49
+ const result = resolve(input, "README.md");
50
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[markdown\]/i);
51
+ });
52
+ });
53
+ // ─── F2 — même section modifiée des deux côtés ────────────────────────────────
54
+ describe("F2 — Markdown : même section modifiée des deux côtés (diff3)", () => {
55
+ const input = [
56
+ `<<<<<<< ours`,
57
+ `# My Project`,
58
+ ``,
59
+ `## Introduction`,
60
+ ``,
61
+ `This is my awesome project with many features.`,
62
+ `||||||| base`,
63
+ `# My Project`,
64
+ ``,
65
+ `## Introduction`,
66
+ ``,
67
+ `This is my project.`,
68
+ `=======`,
69
+ `# My Project`,
70
+ ``,
71
+ `## Introduction`,
72
+ ``,
73
+ `This is my project, now with TypeScript support.`,
74
+ `>>>>>>> theirs`,
75
+ ].join("\n");
76
+ it("ne lève pas d'exception", () => {
77
+ expect(() => resolve(input, "README.md")).not.toThrow();
78
+ });
79
+ it("la raison mentionne [markdown]", () => {
80
+ const result = resolve(input, "README.md");
81
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[markdown\]/i);
82
+ });
83
+ });
84
+ // ─── F3 — Markdown minimal ────────────────────────────────────────────────────
85
+ describe("F3 — Markdown minimal : ne plante pas", () => {
86
+ const input = [
87
+ `<<<<<<< ours`,
88
+ `Some text on ours side.`,
89
+ `=======`,
90
+ `Some text on theirs side.`,
91
+ `>>>>>>> theirs`,
92
+ ].join("\n");
93
+ it("ne lève pas d'exception", () => {
94
+ expect(() => resolve(input, "NOTES.md")).not.toThrow();
95
+ });
96
+ it("produit un résultat avec au moins un hunk", () => {
97
+ const result = resolve(input, "NOTES.md");
98
+ expect(result.hunks.length).toBeGreaterThanOrEqual(1);
99
+ });
100
+ });
101
+ // ─── F4 — README avec section ## Features ajoutée d'un côté ──────────────────
102
+ describe("F4 — README : ajout de section ## Features (diff3)", () => {
103
+ const input = [
104
+ `<<<<<<< ours`,
105
+ `# GitWand`,
106
+ ``,
107
+ `## Overview`,
108
+ ``,
109
+ `GitWand is a Git client.`,
110
+ ``,
111
+ `## Features`,
112
+ ``,
113
+ `- Auto-resolve conflicts`,
114
+ `- AI-powered merge`,
115
+ `||||||| base`,
116
+ `# GitWand`,
117
+ ``,
118
+ `## Overview`,
119
+ ``,
120
+ `GitWand is a Git client.`,
121
+ `=======`,
122
+ `# GitWand`,
123
+ ``,
124
+ `## Overview`,
125
+ ``,
126
+ `GitWand is a Git client.`,
127
+ `>>>>>>> theirs`,
128
+ ].join("\n");
129
+ it("auto-résout via le resolver markdown", () => {
130
+ const result = resolve(input, "README.md");
131
+ expect(result.stats.autoResolved).toBe(1);
132
+ });
133
+ it("le résultat contient la section Features", () => {
134
+ const result = resolve(input, "README.md");
135
+ expect(result.mergedContent).toContain("## Features");
136
+ expect(result.mergedContent).toContain("Auto-resolve conflicts");
137
+ });
138
+ it("la raison mentionne [markdown]", () => {
139
+ const result = resolve(input, "README.md");
140
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[markdown\]/i);
141
+ });
142
+ });
143
+ // ─── F5 — CHANGELOG avec entrée de version ajoutée ───────────────────────────
144
+ describe("F5 — CHANGELOG : entrée de version ajoutée d'un côté (diff3)", () => {
145
+ const input = [
146
+ `<<<<<<< ours`,
147
+ `# Changelog`,
148
+ ``,
149
+ `## [2.1.0] - 2025-04-01`,
150
+ ``,
151
+ `### Added`,
152
+ `- New conflict resolver for YAML files`,
153
+ ``,
154
+ `## [2.0.0] - 2025-01-15`,
155
+ ``,
156
+ `### Breaking Changes`,
157
+ `- Revamped API`,
158
+ `||||||| base`,
159
+ `# Changelog`,
160
+ ``,
161
+ `## [2.0.0] - 2025-01-15`,
162
+ ``,
163
+ `### Breaking Changes`,
164
+ `- Revamped API`,
165
+ `=======`,
166
+ `# Changelog`,
167
+ ``,
168
+ `## [2.0.0] - 2025-01-15`,
169
+ ``,
170
+ `### Breaking Changes`,
171
+ `- Revamped API`,
172
+ `>>>>>>> theirs`,
173
+ ].join("\n");
174
+ it("auto-résout via le resolver markdown", () => {
175
+ const result = resolve(input, "CHANGELOG.md");
176
+ expect(result.stats.autoResolved).toBe(1);
177
+ });
178
+ it("le résultat contient l'entrée de version ajoutée", () => {
179
+ const result = resolve(input, "CHANGELOG.md");
180
+ expect(result.mergedContent).toContain("## [2.1.0]");
181
+ expect(result.mergedContent).toContain("## [2.0.0]");
182
+ });
183
+ it("la raison mentionne [markdown]", () => {
184
+ const result = resolve(input, "CHANGELOG.md");
185
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[markdown\]/i);
186
+ });
187
+ });
188
+ //# sourceMappingURL=markdown.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.test.js","sourceRoot":"","sources":["../../../src/__tests__/resolvers/markdown.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Tests du resolver Vue SFC (GitWand)
3
+ *
4
+ * Fixtures :
5
+ * F1 — modification dans <template> d'un seul côté
6
+ * F2 — modification dans <script setup> d'un seul côté
7
+ * F3 — fichier .vue minimal
8
+ * F4 — ajout d'un <style scoped> d'un côté
9
+ * F5 — conflit dans <template> des deux côtés → conflit ou fallback
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=vue.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/resolvers/vue.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}