@gitwand/core 2.3.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 (113) 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__/v2-core-scenarios.test.d.ts +35 -0
  69. package/dist/__tests__/v2-core-scenarios.test.d.ts.map +1 -0
  70. package/dist/__tests__/v2-core-scenarios.test.js +692 -0
  71. package/dist/__tests__/v2-core-scenarios.test.js.map +1 -0
  72. package/dist/__tests__/validation-parse-tree.test.d.ts +15 -0
  73. package/dist/__tests__/validation-parse-tree.test.d.ts.map +1 -0
  74. package/dist/__tests__/validation-parse-tree.test.js +243 -0
  75. package/dist/__tests__/validation-parse-tree.test.js.map +1 -0
  76. package/dist/config.d.ts +25 -0
  77. package/dist/config.d.ts.map +1 -1
  78. package/dist/config.js +17 -0
  79. package/dist/config.js.map +1 -1
  80. package/dist/diff/index.d.ts.map +1 -1
  81. package/dist/diff/index.js +1 -3
  82. package/dist/diff/index.js.map +1 -1
  83. package/dist/patterns/utils.d.ts +8 -7
  84. package/dist/patterns/utils.d.ts.map +1 -1
  85. package/dist/patterns/utils.js +13 -12
  86. package/dist/patterns/utils.js.map +1 -1
  87. package/dist/resolver/adapters/strict-node.d.ts +32 -0
  88. package/dist/resolver/adapters/strict-node.d.ts.map +1 -0
  89. package/dist/resolver/adapters/strict-node.js +117 -0
  90. package/dist/resolver/adapters/strict-node.js.map +1 -0
  91. package/dist/resolver/index.d.ts +20 -1
  92. package/dist/resolver/index.d.ts.map +1 -1
  93. package/dist/resolver/index.js +89 -5
  94. package/dist/resolver/index.js.map +1 -1
  95. package/dist/resolver/policy.d.ts.map +1 -1
  96. package/dist/resolver/policy.js +3 -0
  97. package/dist/resolver/policy.js.map +1 -1
  98. package/dist/resolver/validate-parse-tree.d.ts +52 -0
  99. package/dist/resolver/validate-parse-tree.d.ts.map +1 -0
  100. package/dist/resolver/validate-parse-tree.js +87 -0
  101. package/dist/resolver/validate-parse-tree.js.map +1 -0
  102. package/dist/resolver/validate-strict.d.ts +27 -0
  103. package/dist/resolver/validate-strict.d.ts.map +1 -0
  104. package/dist/resolver/validate-strict.js +41 -0
  105. package/dist/resolver/validate-strict.js.map +1 -0
  106. package/dist/resolver/validation.d.ts.map +1 -1
  107. package/dist/resolver/validation.js +15 -1
  108. package/dist/resolver/validation.js.map +1 -1
  109. package/dist/resolvers/dispatcher.d.ts.map +1 -1
  110. package/dist/resolvers/dispatcher.js.map +1 -1
  111. package/dist/types.d.ts +60 -3
  112. package/dist/types.d.ts.map +1 -1
  113. package/package.json +1 -1
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tests du pattern value_only_change (priority 60)
3
+ *
4
+ * Nécessite diff2 (sans base).
5
+ * Détection : même nombre de lignes ET detectValueOnlyChange() réussit —
6
+ * les lignes diffèrent uniquement sur des valeurs scalaires volatiles
7
+ * (version, hash, checksum, timestamp, UUID, integrity hash, etc.).
8
+ * Auto-résolu (prend theirs ou ours selon la politique).
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=value-only-change.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-only-change.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/patterns/value-only-change.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Tests du pattern value_only_change (priority 60)
3
+ *
4
+ * Nécessite diff2 (sans base).
5
+ * Détection : même nombre de lignes ET detectValueOnlyChange() réussit —
6
+ * les lignes diffèrent uniquement sur des valeurs scalaires volatiles
7
+ * (version, hash, checksum, timestamp, UUID, integrity hash, etc.).
8
+ * Auto-résolu (prend theirs ou ours selon la politique).
9
+ */
10
+ import { describe, it, expect } from "vitest";
11
+ import { resolve } from "../../resolver.js";
12
+ // ─── Cas qui doivent matcher value_only_change ───────────────
13
+ describe("value_only_change : numéros de version (diff2)", () => {
14
+ const input = [
15
+ `<<<<<<< ours`,
16
+ ` "version": "1.0.0"`,
17
+ `=======`,
18
+ ` "version": "2.0.0"`,
19
+ `>>>>>>> theirs`,
20
+ ].join("\n");
21
+ it("classifie en value_only_change", () => {
22
+ const result = resolve(input, "package.json");
23
+ expect(result.hunks[0].type).toBe("value_only_change");
24
+ });
25
+ it("auto-résout (autoResolved === 1)", () => {
26
+ const result = resolve(input, "package.json");
27
+ expect(result.stats.autoResolved).toBe(1);
28
+ });
29
+ });
30
+ describe("value_only_change : checksums différents (diff2)", () => {
31
+ const input = [
32
+ `<<<<<<< ours`,
33
+ `checksum = "abc123def456"`,
34
+ `=======`,
35
+ `checksum = "def456abc123"`,
36
+ `>>>>>>> theirs`,
37
+ ].join("\n");
38
+ it("classifie en value_only_change", () => {
39
+ const result = resolve(input, "Cargo.lock");
40
+ expect(result.hunks[0].type).toBe("value_only_change");
41
+ });
42
+ it("auto-résout", () => {
43
+ const result = resolve(input, "Cargo.lock");
44
+ expect(result.stats.autoResolved).toBe(1);
45
+ });
46
+ });
47
+ describe("value_only_change : integrity hash npm (diff2)", () => {
48
+ const input = [
49
+ `<<<<<<< ours`,
50
+ ` "integrity": "sha512-aaaaaaaaaaaaaaaa=="`,
51
+ `=======`,
52
+ ` "integrity": "sha512-bbbbbbbbbbbbbbbb=="`,
53
+ `>>>>>>> theirs`,
54
+ ].join("\n");
55
+ it("classifie en value_only_change", () => {
56
+ const result = resolve(input, "package-lock.json");
57
+ expect(result.hunks[0].type).toBe("value_only_change");
58
+ });
59
+ it("auto-résout", () => {
60
+ const result = resolve(input, "package-lock.json");
61
+ expect(result.stats.autoResolved).toBe(1);
62
+ });
63
+ });
64
+ describe("value_only_change : multiple lignes avec valeurs scalaires (diff2)", () => {
65
+ const input = [
66
+ `<<<<<<< ours`,
67
+ ` "version": "1.2.3",`,
68
+ ` "resolved": "https://registry.npmjs.org/pkg/-/pkg-1.2.3.tgz"`,
69
+ `=======`,
70
+ ` "version": "1.2.4",`,
71
+ ` "resolved": "https://registry.npmjs.org/pkg/-/pkg-1.2.4.tgz"`,
72
+ `>>>>>>> theirs`,
73
+ ].join("\n");
74
+ it("classifie en value_only_change", () => {
75
+ const result = resolve(input, "package-lock.json");
76
+ expect(result.hunks[0].type).toBe("value_only_change");
77
+ });
78
+ it("auto-résout", () => {
79
+ const result = resolve(input, "package-lock.json");
80
+ expect(result.stats.autoResolved).toBe(1);
81
+ });
82
+ });
83
+ describe("value_only_change : hash de commit (diff2)", () => {
84
+ const input = [
85
+ `<<<<<<< ours`,
86
+ ` source = "git+https://github.com/org/repo?rev=aabbccdd11223344"`,
87
+ `=======`,
88
+ ` source = "git+https://github.com/org/repo?rev=99887766aabbccdd"`,
89
+ `>>>>>>> theirs`,
90
+ ].join("\n");
91
+ it("classifie en value_only_change", () => {
92
+ const result = resolve(input, "Cargo.lock");
93
+ expect(result.hunks[0].type).toBe("value_only_change");
94
+ });
95
+ it("auto-résout", () => {
96
+ const result = resolve(input, "Cargo.lock");
97
+ expect(result.stats.autoResolved).toBe(1);
98
+ });
99
+ });
100
+ // ─── Cas qui ne doivent PAS matcher value_only_change ────────
101
+ describe("value_only_change : cas qui ne doivent pas matcher", () => {
102
+ it("ne matche pas si les noms de clés changent (pas seulement des valeurs)", () => {
103
+ const input = [
104
+ `<<<<<<< ours`,
105
+ ` "oldKey": "value",`,
106
+ `=======`,
107
+ ` "newKey": "value",`,
108
+ `>>>>>>> theirs`,
109
+ ].join("\n");
110
+ const result = resolve(input, "package.json");
111
+ expect(result.hunks[0].type).not.toBe("value_only_change");
112
+ });
113
+ it("ne matche pas si le nombre de lignes diffère", () => {
114
+ const input = [
115
+ `<<<<<<< ours`,
116
+ ` "version": "1.0.0",`,
117
+ ` "extra": "line",`,
118
+ `=======`,
119
+ ` "version": "2.0.0",`,
120
+ `>>>>>>> theirs`,
121
+ ].join("\n");
122
+ const result = resolve(input, "package.json");
123
+ expect(result.hunks[0].type).not.toBe("value_only_change");
124
+ });
125
+ it("ne matche pas si la structure du code change (pas juste des valeurs)", () => {
126
+ const input = [
127
+ `<<<<<<< ours`,
128
+ `const x = computeValue();`,
129
+ `=======`,
130
+ `const x = 42;`,
131
+ `>>>>>>> theirs`,
132
+ ].join("\n");
133
+ const result = resolve(input, "src/test.ts");
134
+ expect(result.hunks[0].type).not.toBe("value_only_change");
135
+ });
136
+ it("ne matche pas si les deux côtés sont identiques (same_change prioritaire)", () => {
137
+ const input = [
138
+ `<<<<<<< ours`,
139
+ ` "version": "1.0.0"`,
140
+ `=======`,
141
+ ` "version": "1.0.0"`,
142
+ `>>>>>>> theirs`,
143
+ ].join("\n");
144
+ const result = resolve(input, "package.json");
145
+ expect(result.hunks[0].type).toBe("same_change");
146
+ });
147
+ it("ne matche pas si les noms de fonctions changent", () => {
148
+ const input = [
149
+ `<<<<<<< ours`,
150
+ `function handleLogin() {`,
151
+ `=======`,
152
+ `function handleSignIn() {`,
153
+ `>>>>>>> theirs`,
154
+ ].join("\n");
155
+ const result = resolve(input, "src/auth.ts");
156
+ expect(result.hunks[0].type).not.toBe("value_only_change");
157
+ });
158
+ });
159
+ //# sourceMappingURL=value-only-change.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-only-change.test.js","sourceRoot":"","sources":["../../../src/__tests__/patterns/value-only-change.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tests du pattern whitespace_only (priority 50)
3
+ *
4
+ * Compatible diff2 et diff3.
5
+ * Détection : après normalisation (trim de chaque ligne), ours et theirs
6
+ * sont identiques — même code mais indentation ou espacement différent.
7
+ * Auto-résolu (prend ours ou theirs selon la politique).
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=whitespace-only.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whitespace-only.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/patterns/whitespace-only.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Tests du pattern whitespace_only (priority 50)
3
+ *
4
+ * Compatible diff2 et diff3.
5
+ * Détection : après normalisation (trim de chaque ligne), ours et theirs
6
+ * sont identiques — même code mais indentation ou espacement différent.
7
+ * Auto-résolu (prend ours ou theirs selon la politique).
8
+ */
9
+ import { describe, it, expect } from "vitest";
10
+ import { resolve } from "../../resolver.js";
11
+ // ─── Cas qui doivent matcher whitespace_only ─────────────────
12
+ describe("whitespace_only : indentation différente (diff2)", () => {
13
+ const input = [
14
+ `<<<<<<< ours`,
15
+ ` const x = 42;`,
16
+ ` return x;`,
17
+ `=======`,
18
+ ` const x = 42;`,
19
+ ` return x;`,
20
+ `>>>>>>> theirs`,
21
+ ].join("\n");
22
+ it("classifie en whitespace_only", () => {
23
+ const result = resolve(input, "src/utils.ts");
24
+ expect(result.hunks[0].type).toBe("whitespace_only");
25
+ });
26
+ it("auto-résout (autoResolved === 1)", () => {
27
+ const result = resolve(input, "src/utils.ts");
28
+ expect(result.stats.autoResolved).toBe(1);
29
+ });
30
+ });
31
+ describe("whitespace_only : tabs vs spaces (diff2)", () => {
32
+ const input = [
33
+ `<<<<<<< ours`,
34
+ `\tfunction hello() {`,
35
+ `\t\treturn "world";`,
36
+ `\t}`,
37
+ `=======`,
38
+ `function hello() {`,
39
+ ` return "world";`,
40
+ `}`,
41
+ `>>>>>>> theirs`,
42
+ ].join("\n");
43
+ it("classifie en whitespace_only", () => {
44
+ const result = resolve(input, "src/hello.ts");
45
+ expect(result.hunks[0].type).toBe("whitespace_only");
46
+ });
47
+ it("auto-résout", () => {
48
+ const result = resolve(input, "src/hello.ts");
49
+ expect(result.stats.autoResolved).toBe(1);
50
+ });
51
+ });
52
+ describe("whitespace_only : espaces de fin de ligne (diff2)", () => {
53
+ const input = [
54
+ `<<<<<<< ours`,
55
+ `const a = 1; `,
56
+ `const b = 2;`,
57
+ `=======`,
58
+ `const a = 1;`,
59
+ `const b = 2; `,
60
+ `>>>>>>> theirs`,
61
+ ].join("\n");
62
+ it("classifie en whitespace_only", () => {
63
+ const result = resolve(input, "src/vars.ts");
64
+ expect(result.hunks[0].type).toBe("whitespace_only");
65
+ });
66
+ it("auto-résout", () => {
67
+ const result = resolve(input, "src/vars.ts");
68
+ expect(result.stats.autoResolved).toBe(1);
69
+ });
70
+ });
71
+ describe("whitespace_only : indentation modifiée avec base (diff3)", () => {
72
+ const input = [
73
+ `<<<<<<< ours`,
74
+ ` if (condition) {`,
75
+ ` doSomething();`,
76
+ ` }`,
77
+ `||||||| base`,
78
+ ` if (condition) {`,
79
+ ` doSomething();`,
80
+ ` }`,
81
+ `=======`,
82
+ ` if (condition) {`,
83
+ ` doSomething();`,
84
+ ` }`,
85
+ `>>>>>>> theirs`,
86
+ ].join("\n");
87
+ it("classifie en whitespace_only", () => {
88
+ const result = resolve(input, "src/logic.ts");
89
+ expect(result.hunks[0].type).toBe("whitespace_only");
90
+ });
91
+ it("auto-résout", () => {
92
+ const result = resolve(input, "src/logic.ts");
93
+ expect(result.stats.autoResolved).toBe(1);
94
+ });
95
+ });
96
+ describe("whitespace_only : reformatage JSON (diff2)", () => {
97
+ const input = [
98
+ `<<<<<<< ours`,
99
+ ` "name": "gitwand",`,
100
+ ` "version": "1.0.0"`,
101
+ `=======`,
102
+ ` "name": "gitwand",`,
103
+ ` "version": "1.0.0"`,
104
+ `>>>>>>> theirs`,
105
+ ].join("\n");
106
+ it("classifie en whitespace_only", () => {
107
+ const result = resolve(input, "package.json");
108
+ expect(result.hunks[0].type).toBe("whitespace_only");
109
+ });
110
+ it("auto-résout", () => {
111
+ const result = resolve(input, "package.json");
112
+ expect(result.stats.autoResolved).toBe(1);
113
+ });
114
+ });
115
+ // ─── Cas qui ne doivent PAS matcher whitespace_only ──────────
116
+ describe("whitespace_only : cas qui ne doivent pas matcher", () => {
117
+ it("ne matche pas si les contenus diffèrent après trim", () => {
118
+ const input = [
119
+ `<<<<<<< ours`,
120
+ ` const x = 42;`,
121
+ `=======`,
122
+ ` const x = 99;`,
123
+ `>>>>>>> theirs`,
124
+ ].join("\n");
125
+ const result = resolve(input, "src/test.ts");
126
+ expect(result.hunks[0].type).not.toBe("whitespace_only");
127
+ });
128
+ it("ne matche pas si une ligne est ajoutée (nombre de lignes différent)", () => {
129
+ const input = [
130
+ `<<<<<<< ours`,
131
+ ` const a = 1;`,
132
+ ` const b = 2;`,
133
+ `=======`,
134
+ ` const a = 1;`,
135
+ `>>>>>>> theirs`,
136
+ ].join("\n");
137
+ const result = resolve(input, "src/test.ts");
138
+ expect(result.hunks[0].type).not.toBe("whitespace_only");
139
+ });
140
+ it("ne matche pas si les variables ont des noms différents", () => {
141
+ const input = [
142
+ `<<<<<<< ours`,
143
+ ` const foo = bar;`,
144
+ `=======`,
145
+ ` const baz = bar;`,
146
+ `>>>>>>> theirs`,
147
+ ].join("\n");
148
+ const result = resolve(input, "src/test.ts");
149
+ expect(result.hunks[0].type).not.toBe("whitespace_only");
150
+ });
151
+ it("ne matche pas si seul l'ordre des lignes change (reorder_only le capte)", () => {
152
+ const input = [
153
+ `<<<<<<< ours`,
154
+ `alpha`,
155
+ `beta`,
156
+ `=======`,
157
+ `beta`,
158
+ `alpha`,
159
+ `>>>>>>> theirs`,
160
+ ].join("\n");
161
+ const result = resolve(input, "src/test.ts");
162
+ expect(result.hunks[0].type).not.toBe("whitespace_only");
163
+ });
164
+ it("ne matche pas si les deux côtés sont identiques (same_change prioritaire)", () => {
165
+ const input = [
166
+ `<<<<<<< ours`,
167
+ ` const x = 1;`,
168
+ `=======`,
169
+ ` const x = 1;`,
170
+ `>>>>>>> theirs`,
171
+ ].join("\n");
172
+ // same_change (prio 10) prend la main
173
+ const result = resolve(input, "src/test.ts");
174
+ expect(result.hunks[0].type).toBe("same_change");
175
+ });
176
+ });
177
+ //# sourceMappingURL=whitespace-only.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whitespace-only.test.js","sourceRoot":"","sources":["../../../src/__tests__/patterns/whitespace-only.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Tests du resolver CSS/SCSS/Less (GitWand)
3
+ *
4
+ * Fixtures :
5
+ * F1 — règle ajoutée d'un seul côté
6
+ * F2 — même règle, propriétés différentes → conflit partiel
7
+ * F3 — CSS minimal (1 règle)
8
+ * F4 — conflit dans .btn avec couleurs différentes
9
+ * F5 — SCSS avec variable modifiée
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=css.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/resolvers/css.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Tests du resolver CSS/SCSS/Less (GitWand)
3
+ *
4
+ * Fixtures :
5
+ * F1 — règle ajoutée d'un seul côté
6
+ * F2 — même règle, propriétés différentes → conflit partiel
7
+ * F3 — CSS minimal (1 règle)
8
+ * F4 — conflit dans .btn avec couleurs différentes
9
+ * F5 — SCSS avec variable modifiée
10
+ */
11
+ import { describe, it, expect } from "vitest";
12
+ import { resolve } from "../../resolver.js";
13
+ // ─── F1 — règle ajoutée d'un seul côté ───────────────────────────────────────
14
+ describe("F1 — CSS : règle ajoutée d'un seul côté (diff3)", () => {
15
+ const input = [
16
+ `<<<<<<< ours`,
17
+ `.container {`,
18
+ ` display: flex;`,
19
+ ` padding: 16px;`,
20
+ `}`,
21
+ ``,
22
+ `.header {`,
23
+ ` background-color: #fff;`,
24
+ ` height: 60px;`,
25
+ `}`,
26
+ `||||||| base`,
27
+ `.container {`,
28
+ ` display: flex;`,
29
+ ` padding: 16px;`,
30
+ `}`,
31
+ `=======`,
32
+ `.container {`,
33
+ ` display: flex;`,
34
+ ` padding: 16px;`,
35
+ `}`,
36
+ `>>>>>>> theirs`,
37
+ ].join("\n");
38
+ it("auto-résout via le resolver css", () => {
39
+ const result = resolve(input, "styles.css");
40
+ expect(result.stats.autoResolved).toBe(1);
41
+ });
42
+ it("le résultat contient la règle ajoutée", () => {
43
+ const result = resolve(input, "styles.css");
44
+ expect(result.mergedContent).toContain(".header");
45
+ });
46
+ it("la raison mentionne [css]", () => {
47
+ const result = resolve(input, "styles.css");
48
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[css\]/i);
49
+ });
50
+ });
51
+ // ─── F2 — même règle, propriétés différentes ─────────────────────────────────
52
+ describe("F2 — CSS : même règle, valeurs différentes des deux côtés (diff3)", () => {
53
+ const input = [
54
+ `<<<<<<< ours`,
55
+ `.container {`,
56
+ ` max-width: 1200px;`,
57
+ ` padding: 24px;`,
58
+ `}`,
59
+ `||||||| base`,
60
+ `.container {`,
61
+ ` max-width: 960px;`,
62
+ ` padding: 16px;`,
63
+ `}`,
64
+ `=======`,
65
+ `.container {`,
66
+ ` max-width: 1440px;`,
67
+ ` padding: 32px;`,
68
+ `}`,
69
+ `>>>>>>> theirs`,
70
+ ].join("\n");
71
+ it("ne lève pas d'exception", () => {
72
+ expect(() => resolve(input, "styles.css")).not.toThrow();
73
+ });
74
+ it("la raison mentionne [css]", () => {
75
+ const result = resolve(input, "styles.css");
76
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[css\]/i);
77
+ });
78
+ });
79
+ // ─── F3 — CSS minimal ────────────────────────────────────────────────────────
80
+ describe("F3 — CSS minimal : ne plante pas", () => {
81
+ const input = [
82
+ `<<<<<<< ours`,
83
+ `body { margin: 0; }`,
84
+ `||||||| base`,
85
+ `body { margin: 8px; }`,
86
+ `=======`,
87
+ `body { margin: 0; padding: 0; }`,
88
+ `>>>>>>> theirs`,
89
+ ].join("\n");
90
+ it("ne lève pas d'exception", () => {
91
+ expect(() => resolve(input, "minimal.css")).not.toThrow();
92
+ });
93
+ it("produit un résultat avec au moins un hunk", () => {
94
+ const result = resolve(input, "minimal.css");
95
+ expect(result.hunks.length).toBeGreaterThanOrEqual(1);
96
+ });
97
+ });
98
+ // ─── F4 — conflit dans .btn avec couleurs différentes ────────────────────────
99
+ describe("F4 — CSS : .btn avec ajout de règles indépendantes (diff3)", () => {
100
+ const input = [
101
+ `<<<<<<< ours`,
102
+ `.btn {`,
103
+ ` display: inline-flex;`,
104
+ ` padding: 8px 16px;`,
105
+ ` border-radius: 4px;`,
106
+ ` font-weight: 600;`,
107
+ `}`,
108
+ ``,
109
+ `.btn-primary {`,
110
+ ` background-color: #3b82f6;`,
111
+ ` color: #fff;`,
112
+ `}`,
113
+ `||||||| base`,
114
+ `.btn {`,
115
+ ` display: inline-flex;`,
116
+ ` padding: 8px 16px;`,
117
+ ` border-radius: 4px;`,
118
+ `}`,
119
+ `=======`,
120
+ `.btn {`,
121
+ ` display: inline-flex;`,
122
+ ` padding: 8px 16px;`,
123
+ ` border-radius: 4px;`,
124
+ `}`,
125
+ ``,
126
+ `.btn-danger {`,
127
+ ` background-color: #ef4444;`,
128
+ ` color: #fff;`,
129
+ `}`,
130
+ `>>>>>>> theirs`,
131
+ ].join("\n");
132
+ it("ne lève pas d'exception", () => {
133
+ expect(() => resolve(input, "buttons.css")).not.toThrow();
134
+ });
135
+ it("la raison mentionne [css]", () => {
136
+ const result = resolve(input, "buttons.css");
137
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[css\]/i);
138
+ });
139
+ });
140
+ // ─── F5 — SCSS avec variable modifiée ────────────────────────────────────────
141
+ describe("F5 — SCSS : variable ajoutée d'un seul côté (diff3)", () => {
142
+ const input = [
143
+ `<<<<<<< ours`,
144
+ `$primary-color: #3b82f6;`,
145
+ `$secondary-color: #6b7280;`,
146
+ `$font-size-base: 16px;`,
147
+ `$border-radius: 4px;`,
148
+ `||||||| base`,
149
+ `$primary-color: #3b82f6;`,
150
+ `$secondary-color: #6b7280;`,
151
+ `$font-size-base: 16px;`,
152
+ `=======`,
153
+ `$primary-color: #3b82f6;`,
154
+ `$secondary-color: #6b7280;`,
155
+ `$font-size-base: 16px;`,
156
+ `>>>>>>> theirs`,
157
+ ].join("\n");
158
+ it("auto-résout via le resolver css", () => {
159
+ const result = resolve(input, "app.scss");
160
+ expect(result.stats.autoResolved).toBe(1);
161
+ });
162
+ it("le résultat contient la variable ajoutée", () => {
163
+ const result = resolve(input, "app.scss");
164
+ expect(result.mergedContent).toContain("border-radius");
165
+ });
166
+ it("la raison mentionne [css]", () => {
167
+ const result = resolve(input, "app.scss");
168
+ expect(result.resolutions[0].resolutionReason).toMatch(/\[css\]/i);
169
+ });
170
+ });
171
+ //# sourceMappingURL=css.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.test.js","sourceRoot":"","sources":["../../../src/__tests__/resolvers/css.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Tests du resolver imports ES/TS (GitWand)
3
+ *
4
+ * Fixtures :
5
+ * F1 — import ajouté d'un seul côté
6
+ * F2 — même module importé différemment des deux côtés → conflit non résolvable
7
+ * F3 — imports vides (bloc vide)
8
+ * F4 — TypeScript avec `import type`
9
+ * F5 — re-exports `export { X } from 'y'`
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=imports.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/resolvers/imports.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}