@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,225 @@
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
+ import { describe, it, expect } from "vitest";
12
+ import { resolve } from "../../resolver.js";
13
+ // ─── F1 — modification dans <template> d'un seul côté ────────────────────────
14
+ describe("F1 — Vue : modification dans <template> d'un seul côté (diff3)", () => {
15
+ const input = [
16
+ `<<<<<<< ours`,
17
+ `<template>`,
18
+ ` <div class="app">`,
19
+ ` <h1>Hello World</h1>`,
20
+ ` <p>Welcome to my app</p>`,
21
+ ` </div>`,
22
+ `</template>`,
23
+ ``,
24
+ `<script setup>`,
25
+ `const title = 'Hello World';`,
26
+ `</script>`,
27
+ `||||||| base`,
28
+ `<template>`,
29
+ ` <div class="app">`,
30
+ ` <h1>Hello World</h1>`,
31
+ ` </div>`,
32
+ `</template>`,
33
+ ``,
34
+ `<script setup>`,
35
+ `const title = 'Hello World';`,
36
+ `</script>`,
37
+ `=======`,
38
+ `<template>`,
39
+ ` <div class="app">`,
40
+ ` <h1>Hello World</h1>`,
41
+ ` </div>`,
42
+ `</template>`,
43
+ ``,
44
+ `<script setup>`,
45
+ `const title = 'Hello World';`,
46
+ `</script>`,
47
+ `>>>>>>> theirs`,
48
+ ].join("\n");
49
+ it("auto-résout via le resolver vue", () => {
50
+ const result = resolve(input, "App.vue");
51
+ expect(result.stats.autoResolved).toBe(1);
52
+ });
53
+ it("le résultat contient la modification du template", () => {
54
+ const result = resolve(input, "App.vue");
55
+ expect(result.mergedContent).toContain("Welcome to my app");
56
+ });
57
+ it("la raison mentionne [vue]", () => {
58
+ const result = resolve(input, "App.vue");
59
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[vue\]/i);
60
+ });
61
+ });
62
+ // ─── F2 — modification dans <script setup> d'un seul côté ────────────────────
63
+ describe("F2 — Vue : modification dans <script setup> d'un seul côté (diff3)", () => {
64
+ const input = [
65
+ `<<<<<<< ours`,
66
+ `<template>`,
67
+ ` <button @click="handleClick">Click me</button>`,
68
+ `</template>`,
69
+ ``,
70
+ `<script setup lang="ts">`,
71
+ `import { ref } from 'vue';`,
72
+ `import { useRouter } from 'vue-router';`,
73
+ ``,
74
+ `const count = ref(0);`,
75
+ `const router = useRouter();`,
76
+ ``,
77
+ `function handleClick() {`,
78
+ ` count.value++;`,
79
+ `}`,
80
+ `</script>`,
81
+ `||||||| base`,
82
+ `<template>`,
83
+ ` <button @click="handleClick">Click me</button>`,
84
+ `</template>`,
85
+ ``,
86
+ `<script setup lang="ts">`,
87
+ `import { ref } from 'vue';`,
88
+ ``,
89
+ `const count = ref(0);`,
90
+ ``,
91
+ `function handleClick() {`,
92
+ ` count.value++;`,
93
+ `}`,
94
+ `</script>`,
95
+ `=======`,
96
+ `<template>`,
97
+ ` <button @click="handleClick">Click me</button>`,
98
+ `</template>`,
99
+ ``,
100
+ `<script setup lang="ts">`,
101
+ `import { ref } from 'vue';`,
102
+ ``,
103
+ `const count = ref(0);`,
104
+ ``,
105
+ `function handleClick() {`,
106
+ ` count.value++;`,
107
+ `}`,
108
+ `</script>`,
109
+ `>>>>>>> theirs`,
110
+ ].join("\n");
111
+ it("auto-résout via le resolver vue", () => {
112
+ const result = resolve(input, "Button.vue");
113
+ expect(result.stats.autoResolved).toBe(1);
114
+ });
115
+ it("le résultat contient le code ajouté dans script setup", () => {
116
+ const result = resolve(input, "Button.vue");
117
+ expect(result.mergedContent).toContain("useRouter");
118
+ });
119
+ it("la raison mentionne [vue]", () => {
120
+ const result = resolve(input, "Button.vue");
121
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[vue\]/i);
122
+ });
123
+ });
124
+ // ─── F3 — fichier .vue minimal ────────────────────────────────────────────────
125
+ describe("F3 — Vue minimal : ne plante pas", () => {
126
+ const input = [
127
+ `<<<<<<< ours`,
128
+ `<template><div>Ours</div></template>`,
129
+ `=======`,
130
+ `<template><div>Theirs</div></template>`,
131
+ `>>>>>>> theirs`,
132
+ ].join("\n");
133
+ it("ne lève pas d'exception", () => {
134
+ expect(() => resolve(input, "Minimal.vue")).not.toThrow();
135
+ });
136
+ it("produit un résultat avec au moins un hunk", () => {
137
+ const result = resolve(input, "Minimal.vue");
138
+ expect(result.hunks.length).toBeGreaterThanOrEqual(1);
139
+ });
140
+ });
141
+ // ─── F4 — ajout d'un <style scoped> d'un côté ────────────────────────────────
142
+ describe("F4 — Vue : ajout d'un <style scoped> d'un côté (diff3)", () => {
143
+ const input = [
144
+ `<<<<<<< ours`,
145
+ `<template>`,
146
+ ` <div class="card">Card content</div>`,
147
+ `</template>`,
148
+ ``,
149
+ `<script setup lang="ts">`,
150
+ `// component logic`,
151
+ `</script>`,
152
+ ``,
153
+ `<style scoped>`,
154
+ `.card {`,
155
+ ` padding: 16px;`,
156
+ ` border-radius: 8px;`,
157
+ ` box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);`,
158
+ `}`,
159
+ `</style>`,
160
+ `||||||| base`,
161
+ `<template>`,
162
+ ` <div class="card">Card content</div>`,
163
+ `</template>`,
164
+ ``,
165
+ `<script setup lang="ts">`,
166
+ `// component logic`,
167
+ `</script>`,
168
+ `=======`,
169
+ `<template>`,
170
+ ` <div class="card">Card content</div>`,
171
+ `</template>`,
172
+ ``,
173
+ `<script setup lang="ts">`,
174
+ `// component logic`,
175
+ `</script>`,
176
+ `>>>>>>> theirs`,
177
+ ].join("\n");
178
+ it("auto-résout via le resolver vue", () => {
179
+ const result = resolve(input, "Card.vue");
180
+ expect(result.stats.autoResolved).toBe(1);
181
+ });
182
+ it("le résultat contient le bloc style ajouté", () => {
183
+ const result = resolve(input, "Card.vue");
184
+ expect(result.mergedContent).toContain("<style scoped>");
185
+ expect(result.mergedContent).toContain(".card");
186
+ });
187
+ it("la raison mentionne [vue]", () => {
188
+ const result = resolve(input, "Card.vue");
189
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[vue\]/i);
190
+ });
191
+ });
192
+ // ─── F5 — conflit dans <template> des deux côtés ─────────────────────────────
193
+ describe("F5 — Vue : conflit dans <template> des deux côtés (diff3)", () => {
194
+ const input = [
195
+ `<<<<<<< ours`,
196
+ `<template>`,
197
+ ` <div class="app">`,
198
+ ` <h1>My Awesome App</h1>`,
199
+ ` <p>Version 2.0</p>`,
200
+ ` </div>`,
201
+ `</template>`,
202
+ `||||||| base`,
203
+ `<template>`,
204
+ ` <div class="app">`,
205
+ ` <h1>My App</h1>`,
206
+ ` </div>`,
207
+ `</template>`,
208
+ `=======`,
209
+ `<template>`,
210
+ ` <div class="app">`,
211
+ ` <h1>My Great App</h1>`,
212
+ ` <span>Beta</span>`,
213
+ ` </div>`,
214
+ `</template>`,
215
+ `>>>>>>> theirs`,
216
+ ].join("\n");
217
+ it("ne lève pas d'exception", () => {
218
+ expect(() => resolve(input, "App.vue")).not.toThrow();
219
+ });
220
+ it("la raison mentionne [vue]", () => {
221
+ const result = resolve(input, "App.vue");
222
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[vue\]/i);
223
+ });
224
+ });
225
+ //# sourceMappingURL=vue.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.test.js","sourceRoot":"","sources":["../../../src/__tests__/resolvers/vue.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Tests du resolver YAML (GitWand)
3
+ *
4
+ * Fixtures :
5
+ * F1 — clé ajoutée d'un seul côté
6
+ * F2 — même clé modifiée des deux côtés → conflit non résolvable
7
+ * F3 — YAML minimal (1 ligne)
8
+ * F4 — conflit dans values.yaml Helm (clés indépendantes)
9
+ * F5 — conflit dans un workflow GitHub Actions
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=yaml.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/resolvers/yaml.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Tests du resolver YAML (GitWand)
3
+ *
4
+ * Fixtures :
5
+ * F1 — clé ajoutée d'un seul côté
6
+ * F2 — même clé modifiée des deux côtés → conflit non résolvable
7
+ * F3 — YAML minimal (1 ligne)
8
+ * F4 — conflit dans values.yaml Helm (clés indépendantes)
9
+ * F5 — conflit dans un workflow GitHub Actions
10
+ */
11
+ import { describe, it, expect } from "vitest";
12
+ import { resolve } from "../../resolver.js";
13
+ // ─── F1 — clé ajoutée d'un seul côté ─────────────────────────────────────────
14
+ describe("F1 — YAML : clé ajoutée d'un seul côté (diff3)", () => {
15
+ const input = [
16
+ `<<<<<<< ours`,
17
+ `app:`,
18
+ ` name: my-app`,
19
+ ` version: 1.0.0`,
20
+ ` debug: true`,
21
+ `||||||| base`,
22
+ `app:`,
23
+ ` name: my-app`,
24
+ ` version: 1.0.0`,
25
+ `=======`,
26
+ `app:`,
27
+ ` name: my-app`,
28
+ ` version: 1.0.0`,
29
+ `>>>>>>> theirs`,
30
+ ].join("\n");
31
+ it("auto-résout via le resolver yaml", () => {
32
+ const result = resolve(input, "config.yaml");
33
+ expect(result.stats.autoResolved).toBe(1);
34
+ });
35
+ it("le résultat contient la clé ajoutée", () => {
36
+ const result = resolve(input, "config.yaml");
37
+ expect(result.mergedContent).toContain("debug");
38
+ });
39
+ it("la raison mentionne [yaml]", () => {
40
+ const result = resolve(input, "config.yaml");
41
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[yaml\]/i);
42
+ });
43
+ });
44
+ // ─── F2 — même clé modifiée des deux côtés ────────────────────────────────────
45
+ describe("F2 — YAML : même clé modifiée des deux côtés → conflit non résolvable", () => {
46
+ const input = [
47
+ `<<<<<<< ours`,
48
+ `app:`,
49
+ ` name: my-app`,
50
+ ` port: 8080`,
51
+ `||||||| base`,
52
+ `app:`,
53
+ ` name: my-app`,
54
+ ` port: 3000`,
55
+ `=======`,
56
+ `app:`,
57
+ ` name: my-app`,
58
+ ` port: 9090`,
59
+ `>>>>>>> theirs`,
60
+ ].join("\n");
61
+ it("ne lève pas d'exception", () => {
62
+ expect(() => resolve(input, "config.yaml")).not.toThrow();
63
+ });
64
+ it("la raison mentionne [yaml]", () => {
65
+ const result = resolve(input, "config.yaml");
66
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[yaml\]/i);
67
+ });
68
+ });
69
+ // ─── F3 — YAML minimal ───────────────────────────────────────────────────────
70
+ describe("F3 — YAML minimal : ne plante pas", () => {
71
+ const input = [
72
+ `<<<<<<< ours`,
73
+ `key: value-ours`,
74
+ `||||||| base`,
75
+ `key: value-base`,
76
+ `=======`,
77
+ `key: value-theirs`,
78
+ `>>>>>>> theirs`,
79
+ ].join("\n");
80
+ it("ne lève pas d'exception", () => {
81
+ expect(() => resolve(input, "minimal.yaml")).not.toThrow();
82
+ });
83
+ it("produit un résultat avec au moins un hunk", () => {
84
+ const result = resolve(input, "minimal.yaml");
85
+ expect(result.hunks.length).toBeGreaterThanOrEqual(1);
86
+ });
87
+ });
88
+ // ─── F4 — conflit dans values.yaml Helm (clés indépendantes) ─────────────────
89
+ describe("F4 — values.yaml Helm : merge de clés indépendantes (diff3)", () => {
90
+ const input = [
91
+ `<<<<<<< ours`,
92
+ `replicaCount: 2`,
93
+ ``,
94
+ `image:`,
95
+ ` repository: my-registry/my-app`,
96
+ ` tag: v1.2.0`,
97
+ ``,
98
+ `resources:`,
99
+ ` limits:`,
100
+ ` cpu: 500m`,
101
+ ` memory: 512Mi`,
102
+ `||||||| base`,
103
+ `replicaCount: 1`,
104
+ ``,
105
+ `image:`,
106
+ ` repository: my-registry/my-app`,
107
+ ` tag: v1.1.0`,
108
+ `||||||| base`,
109
+ `replicaCount: 1`,
110
+ ``,
111
+ `image:`,
112
+ ` repository: my-registry/my-app`,
113
+ ` tag: v1.1.0`,
114
+ `=======`,
115
+ `replicaCount: 1`,
116
+ ``,
117
+ `image:`,
118
+ ` repository: my-registry/my-app`,
119
+ ` tag: v1.2.0`,
120
+ ``,
121
+ `service:`,
122
+ ` type: ClusterIP`,
123
+ ` port: 80`,
124
+ `>>>>>>> theirs`,
125
+ ].join("\n");
126
+ it("ne lève pas d'exception", () => {
127
+ expect(() => resolve(input, "values.yaml")).not.toThrow();
128
+ });
129
+ it("la raison mentionne [yaml]", () => {
130
+ const result = resolve(input, "values.yaml");
131
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[yaml\]/i);
132
+ });
133
+ });
134
+ describe("F4b — values.yml Helm simple : merge de clés indépendantes (diff3)", () => {
135
+ const input = [
136
+ `<<<<<<< ours`,
137
+ `replicaCount: 2`,
138
+ `image:`,
139
+ ` repository: my-registry/my-app`,
140
+ ` tag: v1.2.0`,
141
+ `resources:`,
142
+ ` limits:`,
143
+ ` cpu: 500m`,
144
+ `||||||| base`,
145
+ `replicaCount: 1`,
146
+ `image:`,
147
+ ` repository: my-registry/my-app`,
148
+ ` tag: v1.1.0`,
149
+ `=======`,
150
+ `replicaCount: 1`,
151
+ `image:`,
152
+ ` repository: my-registry/my-app`,
153
+ ` tag: v1.2.0`,
154
+ `service:`,
155
+ ` type: ClusterIP`,
156
+ `>>>>>>> theirs`,
157
+ ].join("\n");
158
+ it("auto-résout ou ne plante pas", () => {
159
+ expect(() => resolve(input, "values.yml")).not.toThrow();
160
+ });
161
+ it("la raison mentionne [yaml]", () => {
162
+ const result = resolve(input, "values.yml");
163
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[yaml\]/i);
164
+ });
165
+ });
166
+ // ─── F5 — clé ajoutée d'un seul côté (conflit YAML réel nécessitant le resolver) ─
167
+ describe("F5 — YAML : clé de config ajoutée d'un seul côté (diff3)", () => {
168
+ // Ours ajoute `cache:`, theirs n'a pas changé la base → one_side_change trop simple,
169
+ // on utilise deux clés imbriquées différentes pour forcer le resolver YAML.
170
+ const input = [
171
+ `<<<<<<< ours`,
172
+ `database:`,
173
+ ` host: localhost`,
174
+ ` port: 5432`,
175
+ ` name: mydb`,
176
+ ` pool: 10`,
177
+ `||||||| base`,
178
+ `database:`,
179
+ ` host: localhost`,
180
+ ` port: 5432`,
181
+ ` name: mydb`,
182
+ `=======`,
183
+ `database:`,
184
+ ` host: localhost`,
185
+ ` port: 5432`,
186
+ ` name: mydb`,
187
+ ` timeout: 30`,
188
+ `>>>>>>> theirs`,
189
+ ].join("\n");
190
+ it("ne lève pas d'exception", () => {
191
+ expect(() => resolve(input, "config.yml")).not.toThrow();
192
+ });
193
+ it("auto-résout (deux ajouts indépendants)", () => {
194
+ const result = resolve(input, "config.yml");
195
+ expect(result.stats.autoResolved).toBe(1);
196
+ });
197
+ it("le résultat contient les deux nouvelles clés", () => {
198
+ const result = resolve(input, "config.yml");
199
+ expect(result.mergedContent).toContain("pool: 10");
200
+ expect(result.mergedContent).toContain("timeout: 30");
201
+ });
202
+ });
203
+ //# sourceMappingURL=yaml.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.test.js","sourceRoot":"","sources":["../../../src/__tests__/resolvers/yaml.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Integration tests — "grandeur nature"
3
+ *
4
+ * These tests use content derived from the `_tmp_split_scenario` sub-repo
5
+ * (a tiny calculator module with a linear commit history) to produce
6
+ * realistic 3-way merge conflicts and run the full `resolveAsync` pipeline
7
+ * including the structural merge engine (tree-sitter / WASM).
8
+ *
9
+ * Source versions used (from _tmp_split_scenario git history):
10
+ * - test-branch-from-ctx : add()
11
+ * - split-base : add() + subtract()
12
+ * - main : add/subtract/multiply/divide/modulo
13
+ *
14
+ * Four scenarios:
15
+ * S1 — two-branches-grow-independently : both sides add different functions
16
+ * → structural merge should resolve cleanly
17
+ * S2 — ours-only-change : ours modifies + adds, theirs unchanged
18
+ * → structural merge should resolve cleanly
19
+ * S3 — body-conflict : both sides change the same function body
20
+ * → structural merge returns null, hunk-based resolver takes over
21
+ * S4 — delete-vs-modify : ours deletes a function, theirs modifies it
22
+ * → structural merge returns null, hunk-based resolver cannot resolve either
23
+ *
24
+ * The tests are designed to be non-flaky:
25
+ * • If web-tree-sitter / tree-sitter-wasms are available (devDeps in this
26
+ * package), the structural path is exercised and assertions are strict.
27
+ * • If WASM loading fails (CI without optional deps), `resolveAsync` falls
28
+ * back transparently and the tests still verify the hunk-based fallback.
29
+ */
30
+ export {};
31
+ //# sourceMappingURL=grandeur-nature.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grandeur-nature.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/structural/grandeur-nature.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}