@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.
- package/dist/__tests__/corpus.d.ts.map +1 -1
- package/dist/__tests__/corpus.js +115 -0
- package/dist/__tests__/corpus.js.map +1 -1
- package/dist/__tests__/patterns/complex.test.d.ts +9 -0
- package/dist/__tests__/patterns/complex.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/complex.test.js +198 -0
- package/dist/__tests__/patterns/complex.test.js.map +1 -0
- package/dist/__tests__/patterns/delete-no-change.test.d.ts +11 -0
- package/dist/__tests__/patterns/delete-no-change.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/delete-no-change.test.js +178 -0
- package/dist/__tests__/patterns/delete-no-change.test.js.map +1 -0
- package/dist/__tests__/patterns/non-overlapping.test.d.ts +11 -0
- package/dist/__tests__/patterns/non-overlapping.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/non-overlapping.test.js +240 -0
- package/dist/__tests__/patterns/non-overlapping.test.js.map +1 -0
- package/dist/__tests__/patterns/one-side-change.test.d.ts +10 -0
- package/dist/__tests__/patterns/one-side-change.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/one-side-change.test.js +191 -0
- package/dist/__tests__/patterns/one-side-change.test.js.map +1 -0
- package/dist/__tests__/patterns/same-change.test.d.ts +9 -0
- package/dist/__tests__/patterns/same-change.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/same-change.test.js +173 -0
- package/dist/__tests__/patterns/same-change.test.js.map +1 -0
- package/dist/__tests__/patterns/value-only-change.test.d.ts +11 -0
- package/dist/__tests__/patterns/value-only-change.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/value-only-change.test.js +159 -0
- package/dist/__tests__/patterns/value-only-change.test.js.map +1 -0
- package/dist/__tests__/patterns/whitespace-only.test.d.ts +10 -0
- package/dist/__tests__/patterns/whitespace-only.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/whitespace-only.test.js +177 -0
- package/dist/__tests__/patterns/whitespace-only.test.js.map +1 -0
- package/dist/__tests__/resolvers/css.test.d.ts +12 -0
- package/dist/__tests__/resolvers/css.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/css.test.js +171 -0
- package/dist/__tests__/resolvers/css.test.js.map +1 -0
- package/dist/__tests__/resolvers/imports.test.d.ts +12 -0
- package/dist/__tests__/resolvers/imports.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/imports.test.js +135 -0
- package/dist/__tests__/resolvers/imports.test.js.map +1 -0
- package/dist/__tests__/resolvers/json.test.d.ts +12 -0
- package/dist/__tests__/resolvers/json.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/json.test.js +184 -0
- package/dist/__tests__/resolvers/json.test.js.map +1 -0
- package/dist/__tests__/resolvers/lockfile-npm.test.d.ts +12 -0
- package/dist/__tests__/resolvers/lockfile-npm.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/lockfile-npm.test.js +187 -0
- package/dist/__tests__/resolvers/lockfile-npm.test.js.map +1 -0
- package/dist/__tests__/resolvers/lockfile-pnpm.test.d.ts +12 -0
- package/dist/__tests__/resolvers/lockfile-pnpm.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/lockfile-pnpm.test.js +175 -0
- package/dist/__tests__/resolvers/lockfile-pnpm.test.js.map +1 -0
- package/dist/__tests__/resolvers/lockfile-yarn.test.d.ts +12 -0
- package/dist/__tests__/resolvers/lockfile-yarn.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/lockfile-yarn.test.js +165 -0
- package/dist/__tests__/resolvers/lockfile-yarn.test.js.map +1 -0
- package/dist/__tests__/resolvers/markdown.test.d.ts +12 -0
- package/dist/__tests__/resolvers/markdown.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/markdown.test.js +188 -0
- package/dist/__tests__/resolvers/markdown.test.js.map +1 -0
- package/dist/__tests__/resolvers/vue.test.d.ts +12 -0
- package/dist/__tests__/resolvers/vue.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/vue.test.js +225 -0
- package/dist/__tests__/resolvers/vue.test.js.map +1 -0
- package/dist/__tests__/resolvers/yaml.test.d.ts +12 -0
- package/dist/__tests__/resolvers/yaml.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/yaml.test.js +203 -0
- package/dist/__tests__/resolvers/yaml.test.js.map +1 -0
- package/dist/__tests__/v2-core-scenarios.test.d.ts +35 -0
- package/dist/__tests__/v2-core-scenarios.test.d.ts.map +1 -0
- package/dist/__tests__/v2-core-scenarios.test.js +692 -0
- package/dist/__tests__/v2-core-scenarios.test.js.map +1 -0
- package/dist/__tests__/validation-parse-tree.test.d.ts +15 -0
- package/dist/__tests__/validation-parse-tree.test.d.ts.map +1 -0
- package/dist/__tests__/validation-parse-tree.test.js +243 -0
- package/dist/__tests__/validation-parse-tree.test.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -1
- package/dist/diff/index.d.ts.map +1 -1
- package/dist/diff/index.js +1 -3
- package/dist/diff/index.js.map +1 -1
- package/dist/patterns/utils.d.ts +8 -7
- package/dist/patterns/utils.d.ts.map +1 -1
- package/dist/patterns/utils.js +13 -12
- package/dist/patterns/utils.js.map +1 -1
- package/dist/resolver/adapters/strict-node.d.ts +32 -0
- package/dist/resolver/adapters/strict-node.d.ts.map +1 -0
- package/dist/resolver/adapters/strict-node.js +117 -0
- package/dist/resolver/adapters/strict-node.js.map +1 -0
- package/dist/resolver/index.d.ts +20 -1
- package/dist/resolver/index.d.ts.map +1 -1
- package/dist/resolver/index.js +89 -5
- package/dist/resolver/index.js.map +1 -1
- package/dist/resolver/policy.d.ts.map +1 -1
- package/dist/resolver/policy.js +3 -0
- package/dist/resolver/policy.js.map +1 -1
- package/dist/resolver/validate-parse-tree.d.ts +52 -0
- package/dist/resolver/validate-parse-tree.d.ts.map +1 -0
- package/dist/resolver/validate-parse-tree.js +87 -0
- package/dist/resolver/validate-parse-tree.js.map +1 -0
- package/dist/resolver/validate-strict.d.ts +27 -0
- package/dist/resolver/validate-strict.d.ts.map +1 -0
- package/dist/resolver/validate-strict.js +41 -0
- package/dist/resolver/validate-strict.js.map +1 -0
- package/dist/resolver/validation.d.ts.map +1 -1
- package/dist/resolver/validation.js +15 -1
- package/dist/resolver/validation.js.map +1 -1
- package/dist/resolvers/dispatcher.d.ts.map +1 -1
- package/dist/resolvers/dispatcher.js.map +1 -1
- package/dist/types.d.ts +60 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,135 @@
|
|
|
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
|
+
import { describe, it, expect } from "vitest";
|
|
12
|
+
import { resolve } from "../../resolver.js";
|
|
13
|
+
// ─── F1 — import ajouté d'un seul côté ───────────────────────────────────────
|
|
14
|
+
describe("F1 — imports : import ajouté d'un seul côté (diff3)", () => {
|
|
15
|
+
const input = [
|
|
16
|
+
`<<<<<<< ours`,
|
|
17
|
+
`import { ref } from 'vue';`,
|
|
18
|
+
`import { computed } from 'vue';`,
|
|
19
|
+
`import { useRouter } from 'vue-router';`,
|
|
20
|
+
`||||||| base`,
|
|
21
|
+
`import { ref } from 'vue';`,
|
|
22
|
+
`import { computed } from 'vue';`,
|
|
23
|
+
`=======`,
|
|
24
|
+
`import { ref } from 'vue';`,
|
|
25
|
+
`import { computed } from 'vue';`,
|
|
26
|
+
`>>>>>>> theirs`,
|
|
27
|
+
].join("\n");
|
|
28
|
+
it("auto-résout via le resolver imports", () => {
|
|
29
|
+
const result = resolve(input, "composable.ts");
|
|
30
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
31
|
+
});
|
|
32
|
+
it("les deux imports sont présents dans le merge", () => {
|
|
33
|
+
const result = resolve(input, "composable.ts");
|
|
34
|
+
expect(result.mergedContent).toContain("useRouter");
|
|
35
|
+
expect(result.mergedContent).toContain("computed");
|
|
36
|
+
expect(result.mergedContent).toContain("ref");
|
|
37
|
+
});
|
|
38
|
+
it("la raison mentionne [imports]", () => {
|
|
39
|
+
const result = resolve(input, "composable.ts");
|
|
40
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[imports\]/i);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
// ─── F2 — même module importé différemment des deux côtés ────────────────────
|
|
44
|
+
describe("F2 — imports : même module importé différemment des deux côtés (diff3)", () => {
|
|
45
|
+
const input = [
|
|
46
|
+
`<<<<<<< ours`,
|
|
47
|
+
`import { ref, computed, watch } from 'vue';`,
|
|
48
|
+
`||||||| base`,
|
|
49
|
+
`import { ref } from 'vue';`,
|
|
50
|
+
`=======`,
|
|
51
|
+
`import { ref, reactive, toRefs } from 'vue';`,
|
|
52
|
+
`>>>>>>> theirs`,
|
|
53
|
+
].join("\n");
|
|
54
|
+
it("ne lève pas d'exception", () => {
|
|
55
|
+
expect(() => resolve(input, "store.ts")).not.toThrow();
|
|
56
|
+
});
|
|
57
|
+
it("la raison mentionne [imports]", () => {
|
|
58
|
+
const result = resolve(input, "store.ts");
|
|
59
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[imports\]/i);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
// ─── F3 — imports vides ───────────────────────────────────────────────────────
|
|
63
|
+
describe("F3 — imports vides : ne plante pas", () => {
|
|
64
|
+
const input = [
|
|
65
|
+
`<<<<<<< ours`,
|
|
66
|
+
`import {} from 'vue';`,
|
|
67
|
+
`=======`,
|
|
68
|
+
`import {} from 'vue';`,
|
|
69
|
+
`>>>>>>> theirs`,
|
|
70
|
+
].join("\n");
|
|
71
|
+
it("ne lève pas d'exception", () => {
|
|
72
|
+
expect(() => resolve(input, "empty.ts")).not.toThrow();
|
|
73
|
+
});
|
|
74
|
+
it("produit un résultat avec au moins un hunk", () => {
|
|
75
|
+
const result = resolve(input, "empty.ts");
|
|
76
|
+
expect(result.hunks.length).toBeGreaterThanOrEqual(1);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
// ─── F4 — TypeScript avec import type ────────────────────────────────────────
|
|
80
|
+
describe("F4 — imports : TypeScript avec `import type` (diff3)", () => {
|
|
81
|
+
const input = [
|
|
82
|
+
`<<<<<<< ours`,
|
|
83
|
+
`import type { Ref } from 'vue';`,
|
|
84
|
+
`import type { Router } from 'vue-router';`,
|
|
85
|
+
`import type { GitWandOptions } from '@gitwand/core';`,
|
|
86
|
+
`||||||| base`,
|
|
87
|
+
`import type { Ref } from 'vue';`,
|
|
88
|
+
`import type { Router } from 'vue-router';`,
|
|
89
|
+
`=======`,
|
|
90
|
+
`import type { Ref } from 'vue';`,
|
|
91
|
+
`import type { Router } from 'vue-router';`,
|
|
92
|
+
`>>>>>>> theirs`,
|
|
93
|
+
].join("\n");
|
|
94
|
+
it("auto-résout via le resolver imports", () => {
|
|
95
|
+
const result = resolve(input, "types.ts");
|
|
96
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
97
|
+
});
|
|
98
|
+
it("le résultat contient l'import type ajouté", () => {
|
|
99
|
+
const result = resolve(input, "types.ts");
|
|
100
|
+
expect(result.mergedContent).toContain("GitWandOptions");
|
|
101
|
+
expect(result.mergedContent).toContain("import type");
|
|
102
|
+
});
|
|
103
|
+
it("la raison mentionne [imports]", () => {
|
|
104
|
+
const result = resolve(input, "types.ts");
|
|
105
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[imports\]/i);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
// ─── F5 — re-exports ──────────────────────────────────────────────────────────
|
|
109
|
+
// F5 — imports de deux modules différents ajoutés des deux côtés (diff2)
|
|
110
|
+
// En diff2, insertion_at_boundary n'a pas accès à la base → le resolver imports
|
|
111
|
+
// est sollicité pour la fusion sémantique.
|
|
112
|
+
describe("F5 — imports : deux modules différents ajoutés (diff2)", () => {
|
|
113
|
+
const input = [
|
|
114
|
+
`<<<<<<< ours`,
|
|
115
|
+
`import { useRouter } from 'vue-router';`,
|
|
116
|
+
`import { ref } from 'vue';`,
|
|
117
|
+
`import { useI18n } from './composables/useI18n';`,
|
|
118
|
+
`=======`,
|
|
119
|
+
`import { useRouter } from 'vue-router';`,
|
|
120
|
+
`import { ref } from 'vue';`,
|
|
121
|
+
`import { useTheme } from './composables/useTheme';`,
|
|
122
|
+
`>>>>>>> theirs`,
|
|
123
|
+
].join("\n");
|
|
124
|
+
it("auto-résout", () => {
|
|
125
|
+
const result = resolve(input, "src/App.ts");
|
|
126
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
127
|
+
});
|
|
128
|
+
it("le résultat contient les imports des deux côtés", () => {
|
|
129
|
+
const result = resolve(input, "src/App.ts");
|
|
130
|
+
expect(result.mergedContent).toContain("useI18n");
|
|
131
|
+
expect(result.mergedContent).toContain("useTheme");
|
|
132
|
+
expect(result.mergedContent).toContain("useRouter");
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=imports.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports.test.js","sourceRoot":"","sources":["../../../src/__tests__/resolvers/imports.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests du resolver JSON/JSONC (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 — JSON vide/minimal {}
|
|
8
|
+
* F4 — conflit dans package.json scripts
|
|
9
|
+
* F5 — conflit dans tsconfig.json compilerOptions
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=json.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/resolvers/json.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests du resolver JSON/JSONC (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 — JSON vide/minimal {}
|
|
8
|
+
* F4 — conflit dans package.json scripts
|
|
9
|
+
* F5 — conflit dans tsconfig.json compilerOptions
|
|
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 — JSON : clé ajoutée d'un seul côté (diff3)", () => {
|
|
15
|
+
const input = [
|
|
16
|
+
`<<<<<<< ours`,
|
|
17
|
+
`{`,
|
|
18
|
+
` "name": "my-app",`,
|
|
19
|
+
` "version": "1.0.0",`,
|
|
20
|
+
` "description": "A test app"`,
|
|
21
|
+
`}`,
|
|
22
|
+
`||||||| base`,
|
|
23
|
+
`{`,
|
|
24
|
+
` "name": "my-app",`,
|
|
25
|
+
` "version": "1.0.0"`,
|
|
26
|
+
`}`,
|
|
27
|
+
`=======`,
|
|
28
|
+
`{`,
|
|
29
|
+
` "name": "my-app",`,
|
|
30
|
+
` "version": "1.0.0"`,
|
|
31
|
+
`}`,
|
|
32
|
+
`>>>>>>> theirs`,
|
|
33
|
+
].join("\n");
|
|
34
|
+
it("auto-résout via le resolver json", () => {
|
|
35
|
+
const result = resolve(input, "package.json");
|
|
36
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
37
|
+
});
|
|
38
|
+
it("le résultat contient la clé ajoutée", () => {
|
|
39
|
+
const result = resolve(input, "package.json");
|
|
40
|
+
expect(result.mergedContent).toContain("description");
|
|
41
|
+
});
|
|
42
|
+
it("la raison mentionne [json]", () => {
|
|
43
|
+
const result = resolve(input, "package.json");
|
|
44
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[json\]/i);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
// ─── F2 — même clé modifiée des deux côtés ────────────────────────────────────
|
|
48
|
+
describe("F2 — JSON : même clé modifiée des deux côtés → conflit non résolvable", () => {
|
|
49
|
+
const input = [
|
|
50
|
+
`<<<<<<< ours`,
|
|
51
|
+
`{`,
|
|
52
|
+
` "name": "my-app",`,
|
|
53
|
+
` "version": "2.0.0"`,
|
|
54
|
+
`}`,
|
|
55
|
+
`||||||| base`,
|
|
56
|
+
`{`,
|
|
57
|
+
` "name": "my-app",`,
|
|
58
|
+
` "version": "1.0.0"`,
|
|
59
|
+
`}`,
|
|
60
|
+
`=======`,
|
|
61
|
+
`{`,
|
|
62
|
+
` "name": "my-app",`,
|
|
63
|
+
` "version": "3.0.0"`,
|
|
64
|
+
`}`,
|
|
65
|
+
`>>>>>>> theirs`,
|
|
66
|
+
].join("\n");
|
|
67
|
+
it("ne lève pas d'exception", () => {
|
|
68
|
+
expect(() => resolve(input, "package.json")).not.toThrow();
|
|
69
|
+
});
|
|
70
|
+
it("la raison mentionne [json]", () => {
|
|
71
|
+
const result = resolve(input, "package.json");
|
|
72
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[json\]/i);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
// ─── F3 — JSON vide / minimal ─────────────────────────────────────────────────
|
|
76
|
+
describe("F3 — JSON minimal {} : ne plante pas", () => {
|
|
77
|
+
const input = [
|
|
78
|
+
`<<<<<<< ours`,
|
|
79
|
+
`{}`,
|
|
80
|
+
`||||||| base`,
|
|
81
|
+
`{}`,
|
|
82
|
+
`=======`,
|
|
83
|
+
`{}`,
|
|
84
|
+
`>>>>>>> theirs`,
|
|
85
|
+
].join("\n");
|
|
86
|
+
it("ne lève pas d'exception", () => {
|
|
87
|
+
expect(() => resolve(input, "empty.json")).not.toThrow();
|
|
88
|
+
});
|
|
89
|
+
it("produit un résultat avec au moins un hunk", () => {
|
|
90
|
+
const result = resolve(input, "empty.json");
|
|
91
|
+
expect(result.hunks.length).toBeGreaterThanOrEqual(1);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
// ─── F4 — conflit dans package.json scripts ───────────────────────────────────
|
|
95
|
+
describe("F4 — package.json : merge des scripts (diff3)", () => {
|
|
96
|
+
const input = [
|
|
97
|
+
`<<<<<<< ours`,
|
|
98
|
+
`{`,
|
|
99
|
+
` "scripts": {`,
|
|
100
|
+
` "build": "tsc",`,
|
|
101
|
+
` "test": "vitest",`,
|
|
102
|
+
` "lint": "eslint ."`,
|
|
103
|
+
` }`,
|
|
104
|
+
`}`,
|
|
105
|
+
`||||||| base`,
|
|
106
|
+
`{`,
|
|
107
|
+
` "scripts": {`,
|
|
108
|
+
` "build": "tsc",`,
|
|
109
|
+
` "test": "vitest"`,
|
|
110
|
+
` }`,
|
|
111
|
+
`}`,
|
|
112
|
+
`=======`,
|
|
113
|
+
`{`,
|
|
114
|
+
` "scripts": {`,
|
|
115
|
+
` "build": "tsc",`,
|
|
116
|
+
` "test": "vitest",`,
|
|
117
|
+
` "format": "prettier --write ."`,
|
|
118
|
+
` }`,
|
|
119
|
+
`}`,
|
|
120
|
+
`>>>>>>> theirs`,
|
|
121
|
+
].join("\n");
|
|
122
|
+
it("auto-résout via le resolver json", () => {
|
|
123
|
+
const result = resolve(input, "package.json");
|
|
124
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
125
|
+
});
|
|
126
|
+
it("le résultat contient les scripts des deux côtés", () => {
|
|
127
|
+
const result = resolve(input, "package.json");
|
|
128
|
+
expect(result.mergedContent).toContain("lint");
|
|
129
|
+
expect(result.mergedContent).toContain("format");
|
|
130
|
+
expect(result.mergedContent).toContain("build");
|
|
131
|
+
expect(result.mergedContent).toContain("test");
|
|
132
|
+
});
|
|
133
|
+
it("la raison mentionne [json]", () => {
|
|
134
|
+
const result = resolve(input, "package.json");
|
|
135
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[json\]/i);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
// ─── F5 — conflit dans tsconfig.json compilerOptions ─────────────────────────
|
|
139
|
+
describe("F5 — tsconfig.json : merge des compilerOptions (diff3)", () => {
|
|
140
|
+
const input = [
|
|
141
|
+
`<<<<<<< ours`,
|
|
142
|
+
`{`,
|
|
143
|
+
` "compilerOptions": {`,
|
|
144
|
+
` "target": "ES2022",`,
|
|
145
|
+
` "module": "ESNext",`,
|
|
146
|
+
` "strict": true,`,
|
|
147
|
+
` "noUncheckedIndexedAccess": true`,
|
|
148
|
+
` }`,
|
|
149
|
+
`}`,
|
|
150
|
+
`||||||| base`,
|
|
151
|
+
`{`,
|
|
152
|
+
` "compilerOptions": {`,
|
|
153
|
+
` "target": "ES2022",`,
|
|
154
|
+
` "module": "ESNext",`,
|
|
155
|
+
` "strict": true`,
|
|
156
|
+
` }`,
|
|
157
|
+
`}`,
|
|
158
|
+
`=======`,
|
|
159
|
+
`{`,
|
|
160
|
+
` "compilerOptions": {`,
|
|
161
|
+
` "target": "ES2022",`,
|
|
162
|
+
` "module": "ESNext",`,
|
|
163
|
+
` "strict": true,`,
|
|
164
|
+
` "exactOptionalPropertyTypes": true`,
|
|
165
|
+
` }`,
|
|
166
|
+
`}`,
|
|
167
|
+
`>>>>>>> theirs`,
|
|
168
|
+
].join("\n");
|
|
169
|
+
it("auto-résout via le resolver json", () => {
|
|
170
|
+
const result = resolve(input, "tsconfig.json");
|
|
171
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
172
|
+
});
|
|
173
|
+
it("le résultat contient les options des deux côtés", () => {
|
|
174
|
+
const result = resolve(input, "tsconfig.json");
|
|
175
|
+
expect(result.mergedContent).toContain("noUncheckedIndexedAccess");
|
|
176
|
+
expect(result.mergedContent).toContain("exactOptionalPropertyTypes");
|
|
177
|
+
expect(result.mergedContent).toContain("strict");
|
|
178
|
+
});
|
|
179
|
+
it("la raison mentionne [json]", () => {
|
|
180
|
+
const result = resolve(input, "tsconfig.json");
|
|
181
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[json\]/i);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
//# sourceMappingURL=json.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.test.js","sourceRoot":"","sources":["../../../src/__tests__/resolvers/json.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests du resolver lockfile-npm (package-lock.json) — GitWand
|
|
3
|
+
*
|
|
4
|
+
* Fixtures :
|
|
5
|
+
* F1 — package ajouté d'un seul côté
|
|
6
|
+
* F2 — même package, version différente → prefer theirs ou conflit
|
|
7
|
+
* F3 — lockfile minimal (structure vide)
|
|
8
|
+
* F4 — dépendances directes ajoutées des deux côtés (différents packages)
|
|
9
|
+
* F5 — détection du nom `package-lock.json` → bon resolver utilisé
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=lockfile-npm.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockfile-npm.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/resolvers/lockfile-npm.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests du resolver lockfile-npm (package-lock.json) — GitWand
|
|
3
|
+
*
|
|
4
|
+
* Fixtures :
|
|
5
|
+
* F1 — package ajouté d'un seul côté
|
|
6
|
+
* F2 — même package, version différente → prefer theirs ou conflit
|
|
7
|
+
* F3 — lockfile minimal (structure vide)
|
|
8
|
+
* F4 — dépendances directes ajoutées des deux côtés (différents packages)
|
|
9
|
+
* F5 — détection du nom `package-lock.json` → bon resolver utilisé
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect } from "vitest";
|
|
12
|
+
import { resolve } from "../../resolver.js";
|
|
13
|
+
// ─── helpers ──────────────────────────────────────────────────────────────────
|
|
14
|
+
function makeLock(extra = {}) {
|
|
15
|
+
return JSON.stringify({
|
|
16
|
+
name: "my-app",
|
|
17
|
+
version: "1.0.0",
|
|
18
|
+
lockfileVersion: 3,
|
|
19
|
+
requires: true,
|
|
20
|
+
packages: {
|
|
21
|
+
"": { name: "my-app", version: "1.0.0" },
|
|
22
|
+
"node_modules/react": {
|
|
23
|
+
version: "18.2.0",
|
|
24
|
+
resolved: "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
|
|
25
|
+
integrity: "sha512-react",
|
|
26
|
+
},
|
|
27
|
+
...extra,
|
|
28
|
+
},
|
|
29
|
+
}, null, 2);
|
|
30
|
+
}
|
|
31
|
+
// ─── F1 — package ajouté d'un seul côté ───────────────────────────────────────
|
|
32
|
+
describe("F1 — package-lock.json : package ajouté d'un seul côté (diff3)", () => {
|
|
33
|
+
const base = makeLock();
|
|
34
|
+
const ours = makeLock({
|
|
35
|
+
"node_modules/lodash": {
|
|
36
|
+
version: "4.17.21",
|
|
37
|
+
resolved: "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
38
|
+
integrity: "sha512-lodash",
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
const input = [
|
|
42
|
+
`<<<<<<< ours`,
|
|
43
|
+
...ours.split("\n"),
|
|
44
|
+
`||||||| base`,
|
|
45
|
+
...base.split("\n"),
|
|
46
|
+
`=======`,
|
|
47
|
+
...base.split("\n"),
|
|
48
|
+
`>>>>>>> theirs`,
|
|
49
|
+
].join("\n");
|
|
50
|
+
it("auto-résout via le resolver lockfile-npm", () => {
|
|
51
|
+
const result = resolve(input, "package-lock.json");
|
|
52
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
53
|
+
});
|
|
54
|
+
it("le résultat contient le package ajouté", () => {
|
|
55
|
+
const result = resolve(input, "package-lock.json");
|
|
56
|
+
expect(result.mergedContent).toContain("lodash");
|
|
57
|
+
expect(result.mergedContent).toContain("react");
|
|
58
|
+
});
|
|
59
|
+
it("la raison mentionne [lockfile-npm]", () => {
|
|
60
|
+
const result = resolve(input, "package-lock.json");
|
|
61
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-npm\]/i);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
// ─── F2 — même package, version différente ────────────────────────────────────
|
|
65
|
+
describe("F2 — package-lock.json : même package, version différente (diff3)", () => {
|
|
66
|
+
const base = makeLock();
|
|
67
|
+
const ours = makeLock({
|
|
68
|
+
"node_modules/lodash": {
|
|
69
|
+
version: "4.17.20",
|
|
70
|
+
resolved: "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
|
|
71
|
+
integrity: "sha512-old",
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
const theirs = makeLock({
|
|
75
|
+
"node_modules/lodash": {
|
|
76
|
+
version: "4.17.21",
|
|
77
|
+
resolved: "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
|
78
|
+
integrity: "sha512-new",
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
const input = [
|
|
82
|
+
`<<<<<<< ours`,
|
|
83
|
+
...ours.split("\n"),
|
|
84
|
+
`||||||| base`,
|
|
85
|
+
...base.split("\n"),
|
|
86
|
+
`=======`,
|
|
87
|
+
...theirs.split("\n"),
|
|
88
|
+
`>>>>>>> theirs`,
|
|
89
|
+
].join("\n");
|
|
90
|
+
it("ne lève pas d'exception", () => {
|
|
91
|
+
expect(() => resolve(input, "package-lock.json")).not.toThrow();
|
|
92
|
+
});
|
|
93
|
+
it("la raison mentionne [lockfile-npm]", () => {
|
|
94
|
+
const result = resolve(input, "package-lock.json");
|
|
95
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-npm\]/i);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
// ─── F3 — lockfile minimal ────────────────────────────────────────────────────
|
|
99
|
+
describe("F3 — package-lock.json minimal : ne plante pas", () => {
|
|
100
|
+
const minimal = JSON.stringify({ name: "test", version: "1.0.0", lockfileVersion: 3, packages: {} }, null, 2);
|
|
101
|
+
const input = [
|
|
102
|
+
`<<<<<<< ours`,
|
|
103
|
+
...minimal.split("\n"),
|
|
104
|
+
`||||||| base`,
|
|
105
|
+
...minimal.split("\n"),
|
|
106
|
+
`=======`,
|
|
107
|
+
...minimal.split("\n"),
|
|
108
|
+
`>>>>>>> theirs`,
|
|
109
|
+
].join("\n");
|
|
110
|
+
it("ne lève pas d'exception", () => {
|
|
111
|
+
expect(() => resolve(input, "package-lock.json")).not.toThrow();
|
|
112
|
+
});
|
|
113
|
+
it("produit un résultat avec au moins un hunk", () => {
|
|
114
|
+
const result = resolve(input, "package-lock.json");
|
|
115
|
+
expect(result.hunks.length).toBeGreaterThanOrEqual(1);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
// ─── F4 — dépendances différentes ajoutées des deux côtés ────────────────────
|
|
119
|
+
describe("F4 — package-lock.json : packages différents ajoutés des deux côtés (diff3)", () => {
|
|
120
|
+
const base = makeLock();
|
|
121
|
+
const ours = makeLock({
|
|
122
|
+
"node_modules/axios": {
|
|
123
|
+
version: "1.6.0",
|
|
124
|
+
resolved: "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
|
|
125
|
+
integrity: "sha512-axios",
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
const theirs = makeLock({
|
|
129
|
+
"node_modules/date-fns": {
|
|
130
|
+
version: "3.0.0",
|
|
131
|
+
resolved: "https://registry.npmjs.org/date-fns/-/date-fns-3.0.0.tgz",
|
|
132
|
+
integrity: "sha512-datefns",
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
const input = [
|
|
136
|
+
`<<<<<<< ours`,
|
|
137
|
+
...ours.split("\n"),
|
|
138
|
+
`||||||| base`,
|
|
139
|
+
...base.split("\n"),
|
|
140
|
+
`=======`,
|
|
141
|
+
...theirs.split("\n"),
|
|
142
|
+
`>>>>>>> theirs`,
|
|
143
|
+
].join("\n");
|
|
144
|
+
it("auto-résout via le resolver lockfile-npm", () => {
|
|
145
|
+
const result = resolve(input, "package-lock.json");
|
|
146
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
147
|
+
});
|
|
148
|
+
it("le résultat contient les deux packages", () => {
|
|
149
|
+
const result = resolve(input, "package-lock.json");
|
|
150
|
+
expect(result.mergedContent).toContain("axios");
|
|
151
|
+
expect(result.mergedContent).toContain("date-fns");
|
|
152
|
+
expect(result.mergedContent).toContain("react");
|
|
153
|
+
});
|
|
154
|
+
it("la raison mentionne [lockfile-npm]", () => {
|
|
155
|
+
const result = resolve(input, "package-lock.json");
|
|
156
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-npm\]/i);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
// ─── F5 — détection du nom de fichier ────────────────────────────────────────
|
|
160
|
+
describe("F5 — package-lock.json : détection du nom de fichier", () => {
|
|
161
|
+
const base = makeLock();
|
|
162
|
+
const ours = makeLock({
|
|
163
|
+
"node_modules/vue": {
|
|
164
|
+
version: "3.4.0",
|
|
165
|
+
resolved: "https://registry.npmjs.org/vue/-/vue-3.4.0.tgz",
|
|
166
|
+
integrity: "sha512-vue",
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
const input = [
|
|
170
|
+
`<<<<<<< ours`,
|
|
171
|
+
...ours.split("\n"),
|
|
172
|
+
`||||||| base`,
|
|
173
|
+
...base.split("\n"),
|
|
174
|
+
`=======`,
|
|
175
|
+
...base.split("\n"),
|
|
176
|
+
`>>>>>>> theirs`,
|
|
177
|
+
].join("\n");
|
|
178
|
+
it("le nom package-lock.json active le bon resolver", () => {
|
|
179
|
+
const result = resolve(input, "package-lock.json");
|
|
180
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-npm\]/i);
|
|
181
|
+
});
|
|
182
|
+
it("le nom dans un sous-dossier est aussi détecté", () => {
|
|
183
|
+
const result = resolve(input, "apps/frontend/package-lock.json");
|
|
184
|
+
expect(result.resolutions[0].resolutionReason).toMatch(/\[lockfile-npm\]/i);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
//# sourceMappingURL=lockfile-npm.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockfile-npm.test.js","sourceRoot":"","sources":["../../../src/__tests__/resolvers/lockfile-npm.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,iFAAiF;AAEjF,SAAS,QAAQ,CAAC,QAAiC,EAAE;IACnD,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO;QAChB,eAAe,EAAE,CAAC;QAClB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE;YACR,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;YACxC,oBAAoB,EAAE;gBACpB,OAAO,EAAE,QAAQ;gBACjB,QAAQ,EAAE,qDAAqD;gBAC/D,SAAS,EAAE,cAAc;aAC1B;YACD,GAAG,KAAK;SACT;KACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,QAAQ,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC9E,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,QAAQ,CAAC;QACpB,qBAAqB,EAAE;YACrB,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,wDAAwD;YAClE,SAAS,EAAE,eAAe;SAC3B;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,cAAc;QACd,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,SAAS;QACT,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,mEAAmE,EAAE,GAAG,EAAE;IACjF,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,QAAQ,CAAC;QACpB,qBAAqB,EAAE;YACrB,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,wDAAwD;YAClE,SAAS,EAAE,YAAY;SACxB;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,QAAQ,CAAC;QACtB,qBAAqB,EAAE;YACrB,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,wDAAwD;YAClE,SAAS,EAAE,YAAY;SACxB;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,cAAc;QACd,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,SAAS;QACT,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QACrB,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,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAC5B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EACpE,IAAI,EACJ,CAAC,CACF,CAAC;IAEF,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,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnD,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,6EAA6E,EAAE,GAAG,EAAE;IAC3F,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,QAAQ,CAAC;QACpB,oBAAoB,EAAE;YACpB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,oDAAoD;YAC9D,SAAS,EAAE,cAAc;SAC1B;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,QAAQ,CAAC;QACtB,uBAAuB,EAAE;YACvB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,0DAA0D;YACpE,SAAS,EAAE,gBAAgB;SAC5B;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,cAAc;QACd,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,SAAS;QACT,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QACrB,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,QAAQ,CAAC,sDAAsD,EAAE,GAAG,EAAE;IACpE,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,QAAQ,CAAC;QACpB,kBAAkB,EAAE;YAClB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,gDAAgD;YAC1D,SAAS,EAAE,YAAY;SACxB;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,cAAc;QACd,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,SAAS;QACT,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=lockfile-pnpm.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockfile-pnpm.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/resolvers/lockfile-pnpm.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|