@gitwand/core 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +52 -0
- package/dist/__tests__/bench.bench.d.ts +14 -0
- package/dist/__tests__/bench.bench.d.ts.map +1 -0
- package/dist/__tests__/bench.bench.js +137 -0
- package/dist/__tests__/bench.bench.js.map +1 -0
- package/dist/__tests__/confidence-v14.test.d.ts +13 -0
- package/dist/__tests__/confidence-v14.test.d.ts.map +1 -0
- package/dist/__tests__/confidence-v14.test.js +284 -0
- package/dist/__tests__/confidence-v14.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +317 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/corpus.d.ts +36 -0
- package/dist/__tests__/corpus.d.ts.map +1 -0
- package/dist/__tests__/corpus.js +541 -0
- package/dist/__tests__/corpus.js.map +1 -0
- package/dist/__tests__/corpus.test.d.ts +17 -0
- package/dist/__tests__/corpus.test.d.ts.map +1 -0
- package/dist/__tests__/corpus.test.js +179 -0
- package/dist/__tests__/corpus.test.js.map +1 -0
- package/dist/__tests__/diff.test.d.ts +10 -0
- package/dist/__tests__/diff.test.d.ts.map +1 -0
- package/dist/__tests__/diff.test.js +178 -0
- package/dist/__tests__/diff.test.js.map +1 -0
- package/dist/__tests__/format-resolvers.test.d.ts +2 -0
- package/dist/__tests__/format-resolvers.test.d.ts.map +1 -0
- package/dist/__tests__/format-resolvers.test.js +577 -0
- package/dist/__tests__/format-resolvers.test.js.map +1 -0
- package/dist/__tests__/imports-extended.test.d.ts +2 -0
- package/dist/__tests__/imports-extended.test.d.ts.map +1 -0
- package/dist/__tests__/imports-extended.test.js +94 -0
- package/dist/__tests__/imports-extended.test.js.map +1 -0
- package/dist/__tests__/lockfile-resolvers.test.d.ts +2 -0
- package/dist/__tests__/lockfile-resolvers.test.d.ts.map +1 -0
- package/dist/__tests__/lockfile-resolvers.test.js +200 -0
- package/dist/__tests__/lockfile-resolvers.test.js.map +1 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.d.ts +10 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.js +185 -0
- package/dist/__tests__/patterns/insertion-at-boundary.test.js.map +1 -0
- package/dist/__tests__/patterns/reorder-only.test.d.ts +10 -0
- package/dist/__tests__/patterns/reorder-only.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/reorder-only.test.js +181 -0
- package/dist/__tests__/patterns/reorder-only.test.js.map +1 -0
- package/dist/__tests__/phase-7-2-3b.test.d.ts +6 -0
- package/dist/__tests__/phase-7-2-3b.test.d.ts.map +1 -0
- package/dist/__tests__/phase-7-2-3b.test.js +730 -0
- package/dist/__tests__/phase-7-2-3b.test.js.map +1 -0
- package/dist/__tests__/resolver.test.d.ts +2 -0
- package/dist/__tests__/resolver.test.d.ts.map +1 -0
- package/dist/__tests__/resolver.test.js +927 -0
- package/dist/__tests__/resolver.test.js.map +1 -0
- package/dist/__tests__/resolvers/cargo.test.d.ts +10 -0
- package/dist/__tests__/resolvers/cargo.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/cargo.test.js +158 -0
- package/dist/__tests__/resolvers/cargo.test.js.map +1 -0
- package/dist/__tests__/resolvers/dockerfile.test.d.ts +8 -0
- package/dist/__tests__/resolvers/dockerfile.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/dockerfile.test.js +120 -0
- package/dist/__tests__/resolvers/dockerfile.test.js.map +1 -0
- package/dist/__tests__/resolvers/dotenv.test.d.ts +9 -0
- package/dist/__tests__/resolvers/dotenv.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/dotenv.test.js +113 -0
- package/dist/__tests__/resolvers/dotenv.test.js.map +1 -0
- package/dist/__tests__/resolvers/improvements-v14.test.d.ts +8 -0
- package/dist/__tests__/resolvers/improvements-v14.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/improvements-v14.test.js +306 -0
- package/dist/__tests__/resolvers/improvements-v14.test.js.map +1 -0
- package/dist/__tests__/validation.test.d.ts +12 -0
- package/dist/__tests__/validation.test.d.ts.map +1 -0
- package/dist/__tests__/validation.test.js +136 -0
- package/dist/__tests__/validation.test.js.map +1 -0
- package/dist/classifier.d.ts +21 -0
- package/dist/classifier.d.ts.map +1 -0
- package/dist/classifier.js +127 -0
- package/dist/classifier.js.map +1 -0
- package/dist/config.d.ts +108 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +200 -0
- package/dist/config.js.map +1 -0
- package/dist/diff.d.ts +69 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +328 -0
- package/dist/diff.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.d.ts +39 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +164 -0
- package/dist/parser.js.map +1 -0
- package/dist/patterns/complex.d.ts +5 -0
- package/dist/patterns/complex.d.ts.map +1 -0
- package/dist/patterns/complex.js +27 -0
- package/dist/patterns/complex.js.map +1 -0
- package/dist/patterns/delete-no-change.d.ts +4 -0
- package/dist/patterns/delete-no-change.d.ts.map +1 -0
- package/dist/patterns/delete-no-change.js +75 -0
- package/dist/patterns/delete-no-change.js.map +1 -0
- package/dist/patterns/insertion-at-boundary.d.ts +22 -0
- package/dist/patterns/insertion-at-boundary.d.ts.map +1 -0
- package/dist/patterns/insertion-at-boundary.js +164 -0
- package/dist/patterns/insertion-at-boundary.js.map +1 -0
- package/dist/patterns/non-overlapping.d.ts +4 -0
- package/dist/patterns/non-overlapping.d.ts.map +1 -0
- package/dist/patterns/non-overlapping.js +28 -0
- package/dist/patterns/non-overlapping.js.map +1 -0
- package/dist/patterns/one-side-change.d.ts +4 -0
- package/dist/patterns/one-side-change.d.ts.map +1 -0
- package/dist/patterns/one-side-change.js +45 -0
- package/dist/patterns/one-side-change.js.map +1 -0
- package/dist/patterns/reorder-only.d.ts +14 -0
- package/dist/patterns/reorder-only.d.ts.map +1 -0
- package/dist/patterns/reorder-only.js +81 -0
- package/dist/patterns/reorder-only.js.map +1 -0
- package/dist/patterns/same-change.d.ts +4 -0
- package/dist/patterns/same-change.d.ts.map +1 -0
- package/dist/patterns/same-change.js +25 -0
- package/dist/patterns/same-change.js.map +1 -0
- package/dist/patterns/utils.d.ts +70 -0
- package/dist/patterns/utils.d.ts.map +1 -0
- package/dist/patterns/utils.js +206 -0
- package/dist/patterns/utils.js.map +1 -0
- package/dist/patterns/value-only-change.d.ts +4 -0
- package/dist/patterns/value-only-change.d.ts.map +1 -0
- package/dist/patterns/value-only-change.js +34 -0
- package/dist/patterns/value-only-change.js.map +1 -0
- package/dist/patterns/whitespace-only.d.ts +4 -0
- package/dist/patterns/whitespace-only.d.ts.map +1 -0
- package/dist/patterns/whitespace-only.js +32 -0
- package/dist/patterns/whitespace-only.js.map +1 -0
- package/dist/resolver/assemble.d.ts +25 -0
- package/dist/resolver/assemble.d.ts.map +1 -0
- package/dist/resolver/assemble.js +170 -0
- package/dist/resolver/assemble.js.map +1 -0
- package/dist/resolver/format-dispatch.d.ts +40 -0
- package/dist/resolver/format-dispatch.d.ts.map +1 -0
- package/dist/resolver/format-dispatch.js +51 -0
- package/dist/resolver/format-dispatch.js.map +1 -0
- package/dist/resolver/generated-detection.d.ts +48 -0
- package/dist/resolver/generated-detection.d.ts.map +1 -0
- package/dist/resolver/generated-detection.js +123 -0
- package/dist/resolver/generated-detection.js.map +1 -0
- package/dist/resolver/index.d.ts +26 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +147 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/policy.d.ts +53 -0
- package/dist/resolver/policy.d.ts.map +1 -0
- package/dist/resolver/policy.js +99 -0
- package/dist/resolver/policy.js.map +1 -0
- package/dist/resolver/validation.d.ts +28 -0
- package/dist/resolver/validation.d.ts.map +1 -0
- package/dist/resolver/validation.js +96 -0
- package/dist/resolver/validation.js.map +1 -0
- package/dist/resolver.d.ts +18 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +18 -0
- package/dist/resolver.js.map +1 -0
- package/dist/resolvers/cargo.d.ts +34 -0
- package/dist/resolvers/cargo.d.ts.map +1 -0
- package/dist/resolvers/cargo.js +262 -0
- package/dist/resolvers/cargo.js.map +1 -0
- package/dist/resolvers/css.d.ts +60 -0
- package/dist/resolvers/css.d.ts.map +1 -0
- package/dist/resolvers/css.js +531 -0
- package/dist/resolvers/css.js.map +1 -0
- package/dist/resolvers/dispatcher.d.ts +78 -0
- package/dist/resolvers/dispatcher.d.ts.map +1 -0
- package/dist/resolvers/dispatcher.js +290 -0
- package/dist/resolvers/dispatcher.js.map +1 -0
- package/dist/resolvers/dockerfile.d.ts +24 -0
- package/dist/resolvers/dockerfile.d.ts.map +1 -0
- package/dist/resolvers/dockerfile.js +221 -0
- package/dist/resolvers/dockerfile.js.map +1 -0
- package/dist/resolvers/dotenv.d.ts +27 -0
- package/dist/resolvers/dotenv.d.ts.map +1 -0
- package/dist/resolvers/dotenv.js +114 -0
- package/dist/resolvers/dotenv.js.map +1 -0
- package/dist/resolvers/imports.d.ts +63 -0
- package/dist/resolvers/imports.d.ts.map +1 -0
- package/dist/resolvers/imports.js +513 -0
- package/dist/resolvers/imports.js.map +1 -0
- package/dist/resolvers/json.d.ts +48 -0
- package/dist/resolvers/json.d.ts.map +1 -0
- package/dist/resolvers/json.js +363 -0
- package/dist/resolvers/json.js.map +1 -0
- package/dist/resolvers/lockfile-npm.d.ts +38 -0
- package/dist/resolvers/lockfile-npm.d.ts.map +1 -0
- package/dist/resolvers/lockfile-npm.js +267 -0
- package/dist/resolvers/lockfile-npm.js.map +1 -0
- package/dist/resolvers/lockfile-pnpm.d.ts +44 -0
- package/dist/resolvers/lockfile-pnpm.d.ts.map +1 -0
- package/dist/resolvers/lockfile-pnpm.js +277 -0
- package/dist/resolvers/lockfile-pnpm.js.map +1 -0
- package/dist/resolvers/lockfile-yarn.d.ts +40 -0
- package/dist/resolvers/lockfile-yarn.d.ts.map +1 -0
- package/dist/resolvers/lockfile-yarn.js +184 -0
- package/dist/resolvers/lockfile-yarn.js.map +1 -0
- package/dist/resolvers/markdown.d.ts +64 -0
- package/dist/resolvers/markdown.d.ts.map +1 -0
- package/dist/resolvers/markdown.js +335 -0
- package/dist/resolvers/markdown.js.map +1 -0
- package/dist/resolvers/vue.d.ts +65 -0
- package/dist/resolvers/vue.d.ts.map +1 -0
- package/dist/resolvers/vue.js +258 -0
- package/dist/resolvers/vue.js.map +1 -0
- package/dist/resolvers/yaml.d.ts +65 -0
- package/dist/resolvers/yaml.d.ts.map +1 -0
- package/dist/resolvers/yaml.js +405 -0
- package/dist/resolvers/yaml.js.map +1 -0
- package/dist/types.d.ts +256 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { resolve } from "../resolver.js";
|
|
3
|
+
import { tryResolveJsonConflict, stripJsoncComments, } from "../resolvers/json.js";
|
|
4
|
+
import { tryResolveMarkdownConflict, parseSections, extractFrontmatter, } from "../resolvers/markdown.js";
|
|
5
|
+
import { tryFormatAwareResolve, isJsonFile, isMarkdownFile, } from "../resolvers/dispatcher.js";
|
|
6
|
+
// ─── Helpers ──────────────────────────────────────────────
|
|
7
|
+
/** Construit un ConflictHunk minimal pour les tests de dispatch */
|
|
8
|
+
function makeHunk(base, ours, theirs) {
|
|
9
|
+
return {
|
|
10
|
+
baseLines: base,
|
|
11
|
+
oursLines: ours,
|
|
12
|
+
theirsLines: theirs,
|
|
13
|
+
startLine: 1,
|
|
14
|
+
type: "complex",
|
|
15
|
+
confidence: { score: 20, label: "low", dimensions: { typeClassification: 20, dataRisk: 0, scopeImpact: 0, fileFrequency: 0, baseAvailability: 0 }, boosters: [], penalties: [] },
|
|
16
|
+
explanation: "test hunk",
|
|
17
|
+
trace: {
|
|
18
|
+
steps: [{ type: "complex", passed: true, reason: "test" }],
|
|
19
|
+
selected: "complex",
|
|
20
|
+
summary: "test",
|
|
21
|
+
hasBase: base.length > 0,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// ═══════════════════════════════════════════════════════════════
|
|
26
|
+
// PHASE 7.3 — Résolveur JSON sémantique
|
|
27
|
+
// ═══════════════════════════════════════════════════════════════
|
|
28
|
+
describe("Phase 7.3 — JSON resolver", () => {
|
|
29
|
+
// ── stripJsoncComments ──────────────────────────────────
|
|
30
|
+
describe("stripJsoncComments", () => {
|
|
31
|
+
it("supprime les commentaires // sur une ligne", () => {
|
|
32
|
+
const input = `{
|
|
33
|
+
"name": "test", // mon app
|
|
34
|
+
"version": "1.0.0"
|
|
35
|
+
}`;
|
|
36
|
+
const result = stripJsoncComments(input);
|
|
37
|
+
expect(result).not.toContain("//");
|
|
38
|
+
expect(result).toContain('"name"');
|
|
39
|
+
expect(result).toContain('"version"');
|
|
40
|
+
});
|
|
41
|
+
it("supprime les commentaires /* ... */", () => {
|
|
42
|
+
const input = `{
|
|
43
|
+
/* Configuration principale */
|
|
44
|
+
"debug": false
|
|
45
|
+
}`;
|
|
46
|
+
const result = stripJsoncComments(input);
|
|
47
|
+
expect(result).not.toContain("/*");
|
|
48
|
+
expect(result).toContain('"debug"');
|
|
49
|
+
});
|
|
50
|
+
it("ne touche pas aux URLs dans les chaînes", () => {
|
|
51
|
+
const input = `{"url": "https://example.com/path"}`;
|
|
52
|
+
const result = stripJsoncComments(input);
|
|
53
|
+
expect(result).toContain("https://example.com/path");
|
|
54
|
+
});
|
|
55
|
+
it("retourne la chaîne intacte si pas de commentaires", () => {
|
|
56
|
+
const input = `{"key": "value"}`;
|
|
57
|
+
expect(stripJsoncComments(input)).toBe(input);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
// ── tryResolveJsonConflict ────────────────────────────────
|
|
61
|
+
describe("tryResolveJsonConflict — cas de base", () => {
|
|
62
|
+
it("fusionne deux clés ajoutées indépendamment", () => {
|
|
63
|
+
const base = ['{"version": "1.0.0"}'];
|
|
64
|
+
const ours = ['{"version": "1.0.0", "author": "Alice"}'];
|
|
65
|
+
const theirs = ['{"version": "1.0.0", "license": "MIT"}'];
|
|
66
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
67
|
+
expect(result.merged).not.toBeNull();
|
|
68
|
+
const merged = JSON.parse(result.merged);
|
|
69
|
+
expect(merged.author).toBe("Alice");
|
|
70
|
+
expect(merged.license).toBe("MIT");
|
|
71
|
+
expect(merged.version).toBe("1.0.0");
|
|
72
|
+
expect(result.resolvedKeys).toBeGreaterThan(0);
|
|
73
|
+
expect(result.unresolvedKeys).toBe(0);
|
|
74
|
+
});
|
|
75
|
+
it("résout le cas same_change : même valeur ajoutée des deux côtés", () => {
|
|
76
|
+
const base = ['{"name": "app"}'];
|
|
77
|
+
const ours = ['{"name": "app", "type": "module"}'];
|
|
78
|
+
const theirs = ['{"name": "app", "type": "module"}'];
|
|
79
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
80
|
+
expect(result.merged).not.toBeNull();
|
|
81
|
+
const merged = JSON.parse(result.merged);
|
|
82
|
+
expect(merged.type).toBe("module");
|
|
83
|
+
});
|
|
84
|
+
it("résout le cas one_side_change : seul ours a modifié une clé", () => {
|
|
85
|
+
const base = ['{"version": "1.0.0", "port": 3000}'];
|
|
86
|
+
const ours = ['{"version": "2.0.0", "port": 3000}'];
|
|
87
|
+
const theirs = ['{"version": "1.0.0", "port": 4000}'];
|
|
88
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
89
|
+
expect(result.merged).not.toBeNull();
|
|
90
|
+
const merged = JSON.parse(result.merged);
|
|
91
|
+
expect(merged.version).toBe("2.0.0"); // ours a changé version
|
|
92
|
+
expect(merged.port).toBe(4000); // theirs a changé port
|
|
93
|
+
});
|
|
94
|
+
it("retourne null si les deux côtés ont modifié la même clé différemment", () => {
|
|
95
|
+
const base = ['{"version": "1.0.0"}'];
|
|
96
|
+
const ours = ['{"version": "2.0.0"}'];
|
|
97
|
+
const theirs = ['{"version": "3.0.0"}'];
|
|
98
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
99
|
+
expect(result.merged).toBeNull();
|
|
100
|
+
expect(result.unresolvedKeys).toBeGreaterThan(0);
|
|
101
|
+
});
|
|
102
|
+
it("résout la suppression d'une clé si l'autre côté n'a pas changé", () => {
|
|
103
|
+
const base = ['{"name": "app", "debug": true}'];
|
|
104
|
+
const ours = ['{"name": "app"}']; // ours a supprimé debug
|
|
105
|
+
const theirs = ['{"name": "app", "debug": true}']; // theirs n'a pas changé
|
|
106
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
107
|
+
expect(result.merged).not.toBeNull();
|
|
108
|
+
const merged = JSON.parse(result.merged);
|
|
109
|
+
expect(merged.debug).toBeUndefined(); // supprimé
|
|
110
|
+
expect(merged.name).toBe("app");
|
|
111
|
+
});
|
|
112
|
+
it("retourne null si un côté supprime et l'autre modifie la même clé", () => {
|
|
113
|
+
const base = ['{"value": 1}'];
|
|
114
|
+
const ours = ['{}']; // ours a supprimé value
|
|
115
|
+
const theirs = ['{"value": 2}']; // theirs a modifié value
|
|
116
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
117
|
+
expect(result.merged).toBeNull();
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe("tryResolveJsonConflict — objets imbriqués", () => {
|
|
121
|
+
it("fusionne récursivement les objets imbriqués", () => {
|
|
122
|
+
const base = [`{
|
|
123
|
+
"scripts": {
|
|
124
|
+
"build": "tsc",
|
|
125
|
+
"test": "jest"
|
|
126
|
+
}
|
|
127
|
+
}`];
|
|
128
|
+
const ours = [`{
|
|
129
|
+
"scripts": {
|
|
130
|
+
"build": "tsc",
|
|
131
|
+
"test": "jest",
|
|
132
|
+
"lint": "eslint ."
|
|
133
|
+
}
|
|
134
|
+
}`];
|
|
135
|
+
const theirs = [`{
|
|
136
|
+
"scripts": {
|
|
137
|
+
"build": "tsc",
|
|
138
|
+
"test": "jest",
|
|
139
|
+
"format": "prettier ."
|
|
140
|
+
}
|
|
141
|
+
}`];
|
|
142
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
143
|
+
expect(result.merged).not.toBeNull();
|
|
144
|
+
const merged = JSON.parse(result.merged);
|
|
145
|
+
expect(merged.scripts.lint).toBe("eslint .");
|
|
146
|
+
expect(merged.scripts.format).toBe("prettier .");
|
|
147
|
+
expect(merged.scripts.build).toBe("tsc");
|
|
148
|
+
});
|
|
149
|
+
it("retourne null si conflit dans un objet imbriqué", () => {
|
|
150
|
+
const base = ['{"deps": {"foo": "1.0.0"}}'];
|
|
151
|
+
const ours = ['{"deps": {"foo": "2.0.0"}}']; // ours upgraded foo
|
|
152
|
+
const theirs = ['{"deps": {"foo": "3.0.0"}}']; // theirs upgraded foo differently
|
|
153
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
154
|
+
expect(result.merged).toBeNull();
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe("tryResolveJsonConflict — base vide (diff2)", () => {
|
|
158
|
+
it("fusionne deux ajouts de clés différentes sans base", () => {
|
|
159
|
+
const base = []; // diff2 sans section base
|
|
160
|
+
const ours = ['{"newFeature": true}'];
|
|
161
|
+
const theirs = ['{"anotherFeature": "yes"}'];
|
|
162
|
+
// Avec base vide, les deux clés sont "ajoutées" → conflit
|
|
163
|
+
// car on ne sait pas distinguer ajout vs modification
|
|
164
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
165
|
+
// Sans base, les deux côtés ont des clés différentes ajoutées (from empty)
|
|
166
|
+
// → comme les clés sont distinctes, ça devrait merger
|
|
167
|
+
if (result.merged !== null) {
|
|
168
|
+
const merged = JSON.parse(result.merged);
|
|
169
|
+
expect(merged.newFeature).toBe(true);
|
|
170
|
+
expect(merged.anotherFeature).toBe("yes");
|
|
171
|
+
}
|
|
172
|
+
// Sinon (null) → ce test vérifie juste que ça ne plante pas
|
|
173
|
+
expect(result).toBeDefined();
|
|
174
|
+
});
|
|
175
|
+
it("détecte un conflit sur la même clé sans base", () => {
|
|
176
|
+
const base = [];
|
|
177
|
+
const ours = ['{"port": 3000}'];
|
|
178
|
+
const theirs = ['{"port": 4000}'];
|
|
179
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
180
|
+
expect(result.merged).toBeNull(); // conflit sur "port"
|
|
181
|
+
expect(result.unresolvedKeys).toBeGreaterThan(0);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe("tryResolveJsonConflict — JSON mal formé", () => {
|
|
185
|
+
it("retourne null si ours n'est pas un JSON valide", () => {
|
|
186
|
+
const base = ['{"key": "val"}'];
|
|
187
|
+
const ours = ['{ invalid json }'];
|
|
188
|
+
const theirs = ['{"key": "val"}'];
|
|
189
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
190
|
+
expect(result.merged).toBeNull();
|
|
191
|
+
expect(result.reason).toMatch(/parser ours/i);
|
|
192
|
+
});
|
|
193
|
+
it("retourne null si theirs n'est pas un JSON valide", () => {
|
|
194
|
+
const base = ['{"key": "val"}'];
|
|
195
|
+
const ours = ['{"key": "val2"}'];
|
|
196
|
+
const theirs = ['not json at all'];
|
|
197
|
+
const result = tryResolveJsonConflict(base, ours, theirs);
|
|
198
|
+
expect(result.merged).toBeNull();
|
|
199
|
+
expect(result.reason).toMatch(/parser theirs/i);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
// ── Intégration via resolve() ─────────────────────────────
|
|
203
|
+
describe("Intégration JSON via resolve()", () => {
|
|
204
|
+
it("résout un conflit JSON sémantique marqué complex par le classifieur textuel", () => {
|
|
205
|
+
// Deux branches ajoutent chacune une dépendance différente.
|
|
206
|
+
// Le conflit enveloppe un JSON complet (fichier entier) → le résolveur JSON peut le parser.
|
|
207
|
+
// Note : le résolveur JSON ne fonctionne que si chaque section de conflit est un JSON valide.
|
|
208
|
+
const jsonConflict = `<<<<<<< ours
|
|
209
|
+
{
|
|
210
|
+
"name": "my-app",
|
|
211
|
+
"version": "1.0.0",
|
|
212
|
+
"lodash": "^4.17.0"
|
|
213
|
+
}
|
|
214
|
+
||||||| base
|
|
215
|
+
{
|
|
216
|
+
"name": "my-app",
|
|
217
|
+
"version": "1.0.0"
|
|
218
|
+
}
|
|
219
|
+
=======
|
|
220
|
+
{
|
|
221
|
+
"name": "my-app",
|
|
222
|
+
"version": "1.0.0",
|
|
223
|
+
"axios": "^1.0.0"
|
|
224
|
+
}
|
|
225
|
+
>>>>>>> theirs`;
|
|
226
|
+
const result = resolve(jsonConflict, "package.json");
|
|
227
|
+
// Le résolveur JSON doit avoir fusionné les deux dépendances
|
|
228
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
229
|
+
expect(result.mergedContent).not.toBeNull();
|
|
230
|
+
const merged = JSON.parse(result.mergedContent);
|
|
231
|
+
expect(merged.lodash).toBeDefined();
|
|
232
|
+
expect(merged.axios).toBeDefined();
|
|
233
|
+
expect(merged.version).toBe("1.0.0");
|
|
234
|
+
});
|
|
235
|
+
it("la raison de résolution mentionne le résolveur json", () => {
|
|
236
|
+
const jsonConflict = `{
|
|
237
|
+
<<<<<<< ours
|
|
238
|
+
"port": 3000,
|
|
239
|
+
"debug": true
|
|
240
|
+
||||||| base
|
|
241
|
+
"port": 3000
|
|
242
|
+
=======
|
|
243
|
+
"port": 3000,
|
|
244
|
+
"host": "0.0.0.0"
|
|
245
|
+
>>>>>>> theirs
|
|
246
|
+
}`;
|
|
247
|
+
const result = resolve(jsonConflict, "config.json");
|
|
248
|
+
if (result.stats.autoResolved > 0) {
|
|
249
|
+
const res = result.resolutions[0];
|
|
250
|
+
expect(res.resolutionReason).toMatch(/\[json\]/i);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
it("tombe en fallback textuel pour un conflit JSON non résolvable par le résolveur JSON", () => {
|
|
254
|
+
// Les deux côtés changent la même clé scalaire différemment
|
|
255
|
+
const jsonConflict = `{
|
|
256
|
+
"name": "app",
|
|
257
|
+
<<<<<<< ours
|
|
258
|
+
"version": "2.0.0",
|
|
259
|
+
"description": "Version ours"
|
|
260
|
+
||||||| base
|
|
261
|
+
"version": "1.0.0",
|
|
262
|
+
"description": "Base"
|
|
263
|
+
=======
|
|
264
|
+
"version": "3.0.0",
|
|
265
|
+
"description": "Version theirs"
|
|
266
|
+
>>>>>>> theirs
|
|
267
|
+
}`;
|
|
268
|
+
const result = resolve(jsonConflict, "package.json");
|
|
269
|
+
// Le résolveur JSON ne peut pas résoudre (conflit sur version ET description)
|
|
270
|
+
// Le moteur textuel prendra le relais → complex → non résolu
|
|
271
|
+
expect(result.stats.remaining).toBe(1);
|
|
272
|
+
});
|
|
273
|
+
it("la validation JSON passe sur un conflit JSON résolu sémantiquement", () => {
|
|
274
|
+
const jsonConflict = `{
|
|
275
|
+
"a": 1,
|
|
276
|
+
<<<<<<< ours
|
|
277
|
+
"b": 2,
|
|
278
|
+
"c": 3
|
|
279
|
+
||||||| base
|
|
280
|
+
"b": 2
|
|
281
|
+
=======
|
|
282
|
+
"b": 2,
|
|
283
|
+
"d": 4
|
|
284
|
+
>>>>>>> theirs
|
|
285
|
+
}`;
|
|
286
|
+
const result = resolve(jsonConflict, "data.json");
|
|
287
|
+
if (result.mergedContent !== null) {
|
|
288
|
+
expect(result.validation.isValid).toBe(true);
|
|
289
|
+
expect(result.validation.syntaxError).toBeNull();
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
// ═══════════════════════════════════════════════════════════════
|
|
295
|
+
// PHASE 7.3 — Résolveur Markdown
|
|
296
|
+
// ═══════════════════════════════════════════════════════════════
|
|
297
|
+
describe("Phase 7.3 — Markdown resolver", () => {
|
|
298
|
+
// ── extractFrontmatter ────────────────────────────────────
|
|
299
|
+
describe("extractFrontmatter", () => {
|
|
300
|
+
it("extrait le frontmatter YAML entre ---", () => {
|
|
301
|
+
const lines = [
|
|
302
|
+
"---",
|
|
303
|
+
"title: Mon article",
|
|
304
|
+
"date: 2024-01-01",
|
|
305
|
+
"---",
|
|
306
|
+
"",
|
|
307
|
+
"# Contenu",
|
|
308
|
+
];
|
|
309
|
+
const { frontmatter, rest } = extractFrontmatter(lines);
|
|
310
|
+
expect(frontmatter).toHaveLength(4);
|
|
311
|
+
expect(frontmatter[0]).toBe("---");
|
|
312
|
+
expect(frontmatter[3]).toBe("---");
|
|
313
|
+
expect(rest).toContain("# Contenu");
|
|
314
|
+
});
|
|
315
|
+
it("retourne un frontmatter vide si pas de ---", () => {
|
|
316
|
+
const lines = ["# Mon titre", "", "Contenu"];
|
|
317
|
+
const { frontmatter, rest } = extractFrontmatter(lines);
|
|
318
|
+
expect(frontmatter).toHaveLength(0);
|
|
319
|
+
expect(rest).toEqual(lines);
|
|
320
|
+
});
|
|
321
|
+
it("gère le fichier vide", () => {
|
|
322
|
+
const { frontmatter, rest } = extractFrontmatter([]);
|
|
323
|
+
expect(frontmatter).toHaveLength(0);
|
|
324
|
+
expect(rest).toHaveLength(0);
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
// ── parseSections ─────────────────────────────────────────
|
|
328
|
+
describe("parseSections", () => {
|
|
329
|
+
it("découpe un document Markdown en sections", () => {
|
|
330
|
+
const lines = [
|
|
331
|
+
"Prologue",
|
|
332
|
+
"# Introduction",
|
|
333
|
+
"Contenu intro",
|
|
334
|
+
"## Sous-section",
|
|
335
|
+
"Contenu sous-section",
|
|
336
|
+
"# Conclusion",
|
|
337
|
+
"Fin",
|
|
338
|
+
];
|
|
339
|
+
const sections = parseSections(lines);
|
|
340
|
+
expect(sections).toHaveLength(4); // prologue + 3 headings
|
|
341
|
+
expect(sections[0].heading).toBeNull(); // prologue
|
|
342
|
+
expect(sections[1].heading).toBe("# Introduction");
|
|
343
|
+
expect(sections[1].level).toBe(1);
|
|
344
|
+
expect(sections[2].heading).toBe("## Sous-section");
|
|
345
|
+
expect(sections[2].level).toBe(2);
|
|
346
|
+
expect(sections[3].heading).toBe("# Conclusion");
|
|
347
|
+
});
|
|
348
|
+
it("gère un document sans prologue", () => {
|
|
349
|
+
const lines = ["# Titre", "Contenu"];
|
|
350
|
+
const sections = parseSections(lines);
|
|
351
|
+
// sections[0] est le prologue vide, sections[1] est le heading
|
|
352
|
+
const nonEmpty = sections.filter((s) => s.heading || s.lines.length > 0);
|
|
353
|
+
expect(nonEmpty.some((s) => s.heading === "# Titre")).toBe(true);
|
|
354
|
+
});
|
|
355
|
+
it("gère un document vide", () => {
|
|
356
|
+
const sections = parseSections([]);
|
|
357
|
+
expect(sections).toHaveLength(1); // prologue vide
|
|
358
|
+
expect(sections[0].heading).toBeNull();
|
|
359
|
+
expect(sections[0].lines).toHaveLength(0);
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
// ── tryResolveMarkdownConflict ────────────────────────────
|
|
363
|
+
describe("tryResolveMarkdownConflict — résolution de sections", () => {
|
|
364
|
+
it("accepte ours quand seul ours a modifié une section", () => {
|
|
365
|
+
const base = [
|
|
366
|
+
"# Titre",
|
|
367
|
+
"",
|
|
368
|
+
"## Introduction",
|
|
369
|
+
"Texte original.",
|
|
370
|
+
"",
|
|
371
|
+
"## Conclusion",
|
|
372
|
+
"Fin originale.",
|
|
373
|
+
];
|
|
374
|
+
const ours = [
|
|
375
|
+
"# Titre",
|
|
376
|
+
"",
|
|
377
|
+
"## Introduction",
|
|
378
|
+
"Texte modifié par ours.",
|
|
379
|
+
"",
|
|
380
|
+
"## Conclusion",
|
|
381
|
+
"Fin originale.",
|
|
382
|
+
];
|
|
383
|
+
const theirs = [
|
|
384
|
+
"# Titre",
|
|
385
|
+
"",
|
|
386
|
+
"## Introduction",
|
|
387
|
+
"Texte original.",
|
|
388
|
+
"",
|
|
389
|
+
"## Conclusion",
|
|
390
|
+
"Nouvelle fin par theirs.",
|
|
391
|
+
];
|
|
392
|
+
const result = tryResolveMarkdownConflict(base, ours, theirs);
|
|
393
|
+
expect(result.mergedLines).not.toBeNull();
|
|
394
|
+
const merged = result.mergedLines.join("\n");
|
|
395
|
+
expect(merged).toContain("Texte modifié par ours."); // ours intro
|
|
396
|
+
expect(merged).toContain("Nouvelle fin par theirs."); // theirs conclusion
|
|
397
|
+
expect(result.conflictedSections).toHaveLength(0);
|
|
398
|
+
});
|
|
399
|
+
it("accepte theirs quand seul theirs a ajouté une section", () => {
|
|
400
|
+
const base = ["# Titre", "", "Contenu."];
|
|
401
|
+
const ours = ["# Titre", "", "Contenu."];
|
|
402
|
+
const theirs = ["# Titre", "", "Contenu.", "", "## Nouvelle section", "Contenu ajouté."];
|
|
403
|
+
const result = tryResolveMarkdownConflict(base, ours, theirs);
|
|
404
|
+
expect(result.mergedLines).not.toBeNull();
|
|
405
|
+
const merged = result.mergedLines.join("\n");
|
|
406
|
+
expect(merged).toContain("## Nouvelle section");
|
|
407
|
+
expect(merged).toContain("Contenu ajouté.");
|
|
408
|
+
});
|
|
409
|
+
it("résout le cas same_change : même modification des deux côtés", () => {
|
|
410
|
+
const base = ["# Titre", "Contenu original."];
|
|
411
|
+
const ours = ["# Titre", "Contenu modifié."];
|
|
412
|
+
const theirs = ["# Titre", "Contenu modifié."];
|
|
413
|
+
const result = tryResolveMarkdownConflict(base, ours, theirs);
|
|
414
|
+
expect(result.mergedLines).not.toBeNull();
|
|
415
|
+
expect(result.mergedLines.join("\n")).toContain("Contenu modifié.");
|
|
416
|
+
});
|
|
417
|
+
it("retourne null si les deux côtés ont modifié la même section différemment", () => {
|
|
418
|
+
const base = ["# Titre", "Contenu original."];
|
|
419
|
+
const ours = ["# Titre", "Version ours."];
|
|
420
|
+
const theirs = ["# Titre", "Version theirs."];
|
|
421
|
+
const result = tryResolveMarkdownConflict(base, ours, theirs);
|
|
422
|
+
expect(result.mergedLines).toBeNull();
|
|
423
|
+
expect(result.conflictedSections.length).toBeGreaterThan(0);
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
describe("tryResolveMarkdownConflict — frontmatter", () => {
|
|
427
|
+
it("fusionne le frontmatter quand seul un côté l'a modifié", () => {
|
|
428
|
+
const base = [
|
|
429
|
+
"---",
|
|
430
|
+
"title: Titre",
|
|
431
|
+
"---",
|
|
432
|
+
"",
|
|
433
|
+
"# Contenu",
|
|
434
|
+
"Texte.",
|
|
435
|
+
];
|
|
436
|
+
const ours = [
|
|
437
|
+
"---",
|
|
438
|
+
"title: Titre mis à jour",
|
|
439
|
+
"---",
|
|
440
|
+
"",
|
|
441
|
+
"# Contenu",
|
|
442
|
+
"Texte.",
|
|
443
|
+
];
|
|
444
|
+
const theirs = [
|
|
445
|
+
"---",
|
|
446
|
+
"title: Titre",
|
|
447
|
+
"---",
|
|
448
|
+
"",
|
|
449
|
+
"# Contenu",
|
|
450
|
+
"Texte modifié.",
|
|
451
|
+
];
|
|
452
|
+
const result = tryResolveMarkdownConflict(base, ours, theirs);
|
|
453
|
+
expect(result.mergedLines).not.toBeNull();
|
|
454
|
+
const merged = result.mergedLines.join("\n");
|
|
455
|
+
expect(merged).toContain("Titre mis à jour"); // frontmatter de ours
|
|
456
|
+
expect(merged).toContain("Texte modifié."); // contenu de theirs
|
|
457
|
+
});
|
|
458
|
+
});
|
|
459
|
+
// ── Intégration via resolve() ─────────────────────────────
|
|
460
|
+
describe("Intégration Markdown via resolve()", () => {
|
|
461
|
+
it("résout un conflit Markdown avec sections non-overlapping", () => {
|
|
462
|
+
const mdConflict = `# Mon Document
|
|
463
|
+
|
|
464
|
+
## Introduction
|
|
465
|
+
|
|
466
|
+
Contexte du projet.
|
|
467
|
+
|
|
468
|
+
<<<<<<< ours
|
|
469
|
+
## Fonctionnalités
|
|
470
|
+
|
|
471
|
+
- Feature A
|
|
472
|
+
- Feature B (nouveau)
|
|
473
|
+
||||||| base
|
|
474
|
+
## Fonctionnalités
|
|
475
|
+
|
|
476
|
+
- Feature A
|
|
477
|
+
=======
|
|
478
|
+
## Fonctionnalités
|
|
479
|
+
|
|
480
|
+
- Feature A
|
|
481
|
+
|
|
482
|
+
## Déploiement
|
|
483
|
+
|
|
484
|
+
Instructions de déploiement.
|
|
485
|
+
>>>>>>> theirs
|
|
486
|
+
|
|
487
|
+
## Conclusion
|
|
488
|
+
|
|
489
|
+
Fin du document.`;
|
|
490
|
+
const result = resolve(mdConflict, "README.md");
|
|
491
|
+
// Le conflit doit être résolu (Markdown resolver ou insertion_at_boundary)
|
|
492
|
+
if (result.stats.autoResolved > 0) {
|
|
493
|
+
expect(result.mergedContent).not.toBeNull();
|
|
494
|
+
}
|
|
495
|
+
// Au minimum le test vérifie que ça ne plante pas
|
|
496
|
+
expect(result.stats).toBeDefined();
|
|
497
|
+
});
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
// ═══════════════════════════════════════════════════════════════
|
|
501
|
+
// PHASE 7.3 — Dispatcher de format
|
|
502
|
+
// ═══════════════════════════════════════════════════════════════
|
|
503
|
+
describe("Phase 7.3 — Dispatcher de format", () => {
|
|
504
|
+
describe("isJsonFile", () => {
|
|
505
|
+
it("détecte les fichiers .json", () => {
|
|
506
|
+
expect(isJsonFile("package.json")).toBe(true);
|
|
507
|
+
expect(isJsonFile("tsconfig.json")).toBe(true);
|
|
508
|
+
expect(isJsonFile("src/config.json")).toBe(true);
|
|
509
|
+
});
|
|
510
|
+
it("détecte les fichiers .jsonc", () => {
|
|
511
|
+
expect(isJsonFile(".vscode/settings.jsonc")).toBe(true);
|
|
512
|
+
expect(isJsonFile("tsconfig.jsonc")).toBe(true);
|
|
513
|
+
});
|
|
514
|
+
it("ne détecte pas les non-JSON", () => {
|
|
515
|
+
expect(isJsonFile("app.ts")).toBe(false);
|
|
516
|
+
expect(isJsonFile("config.yaml")).toBe(false);
|
|
517
|
+
expect(isJsonFile("README.md")).toBe(false);
|
|
518
|
+
expect(isJsonFile("package-lock.json.bak")).toBe(false);
|
|
519
|
+
});
|
|
520
|
+
});
|
|
521
|
+
describe("isMarkdownFile", () => {
|
|
522
|
+
it("détecte les fichiers .md", () => {
|
|
523
|
+
expect(isMarkdownFile("README.md")).toBe(true);
|
|
524
|
+
expect(isMarkdownFile("docs/guide.md")).toBe(true);
|
|
525
|
+
});
|
|
526
|
+
it("détecte les fichiers .mdx et .markdown", () => {
|
|
527
|
+
expect(isMarkdownFile("docs/page.mdx")).toBe(true);
|
|
528
|
+
expect(isMarkdownFile("CHANGELOG.markdown")).toBe(true);
|
|
529
|
+
});
|
|
530
|
+
it("ne détecte pas les non-Markdown", () => {
|
|
531
|
+
expect(isMarkdownFile("app.ts")).toBe(false);
|
|
532
|
+
expect(isMarkdownFile("config.json")).toBe(false);
|
|
533
|
+
});
|
|
534
|
+
});
|
|
535
|
+
describe("tryFormatAwareResolve", () => {
|
|
536
|
+
it("retourne resolverUsed: 'none' pour les fichiers .ts", () => {
|
|
537
|
+
const hunk = makeHunk(["base"], ["ours"], ["theirs"]);
|
|
538
|
+
const result = tryFormatAwareResolve(hunk, "src/app.ts");
|
|
539
|
+
expect(result.resolverUsed).toBe("none");
|
|
540
|
+
expect(result.lines).toBeNull();
|
|
541
|
+
});
|
|
542
|
+
it("retourne resolverUsed: 'json' pour les fichiers .json", () => {
|
|
543
|
+
const hunk = makeHunk(['{"a": 1}'], ['{"a": 1, "b": 2}'], ['{"a": 1, "c": 3}']);
|
|
544
|
+
const result = tryFormatAwareResolve(hunk, "config.json");
|
|
545
|
+
expect(result.resolverUsed).toBe("json");
|
|
546
|
+
});
|
|
547
|
+
it("retourne resolverUsed: 'markdown' pour les fichiers .md", () => {
|
|
548
|
+
const hunk = makeHunk(["# Section", "Contenu."], ["# Section", "Modifié ours."], ["# Section", "Contenu."]);
|
|
549
|
+
const result = tryFormatAwareResolve(hunk, "README.md");
|
|
550
|
+
expect(result.resolverUsed).toBe("markdown");
|
|
551
|
+
});
|
|
552
|
+
it("retourne lines !== null quand JSON resolver réussit", () => {
|
|
553
|
+
const hunk = makeHunk(['{"x": 1}'], ['{"x": 1, "y": 2}'], ['{"x": 1, "z": 3}']);
|
|
554
|
+
const result = tryFormatAwareResolve(hunk, "data.json");
|
|
555
|
+
expect(result.resolverUsed).toBe("json");
|
|
556
|
+
expect(result.lines).not.toBeNull();
|
|
557
|
+
// Le JSON fusionné doit avoir les deux nouvelles clés
|
|
558
|
+
const merged = JSON.parse(result.lines.join("\n"));
|
|
559
|
+
expect(merged.y).toBe(2);
|
|
560
|
+
expect(merged.z).toBe(3);
|
|
561
|
+
});
|
|
562
|
+
it("retourne lines: null quand JSON resolver échoue", () => {
|
|
563
|
+
// Conflit sur la même clé → non résolvable
|
|
564
|
+
const hunk = makeHunk(['{"v": 1}'], ['{"v": 2}'], ['{"v": 3}']);
|
|
565
|
+
const result = tryFormatAwareResolve(hunk, "settings.json");
|
|
566
|
+
expect(result.resolverUsed).toBe("json");
|
|
567
|
+
expect(result.lines).toBeNull();
|
|
568
|
+
expect(result.reason).toMatch(/\[json\]/i);
|
|
569
|
+
});
|
|
570
|
+
it("la reason mentionne le résolveur utilisé", () => {
|
|
571
|
+
const hunk = makeHunk(['{"a": 1}'], ['{"a": 2}'], ['{"a": 3}']);
|
|
572
|
+
const result = tryFormatAwareResolve(hunk, "app.json");
|
|
573
|
+
expect(result.reason).toMatch(/^\[json\]/);
|
|
574
|
+
});
|
|
575
|
+
});
|
|
576
|
+
});
|
|
577
|
+
//# sourceMappingURL=format-resolvers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-resolvers.test.js","sourceRoot":"","sources":["../../src/__tests__/format-resolvers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,0BAA0B,EAC1B,aAAa,EACb,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,GACf,MAAM,4BAA4B,CAAC;AAGpC,6DAA6D;AAE7D,mEAAmE;AACnE,SAAS,QAAQ,CAAC,IAAc,EAAE,IAAc,EAAE,MAAgB;IAChE,OAAO;QACL,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,MAAM;QACnB,SAAS,EAAE,CAAC;QACZ,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAChL,WAAW,EAAE,WAAW;QACxB,KAAK,EAAE;YACL,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1D,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;SACzB;KACF,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,wCAAwC;AACxC,kEAAkE;AAElE,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,2DAA2D;IAE3D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,KAAK,GAAG;;;EAGlB,CAAC;YACG,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,KAAK,GAAG;;;EAGlB,CAAC;YACG,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,KAAK,GAAG,qCAAqC,CAAC;YACpD,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC;YACjC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAE7D,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,CAAC,wCAAwC,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,CAAC,mCAAmC,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,IAAI,GAAG,CAAC,oCAAoC,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,CAAC,oCAAoC,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAEtD,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;YAC9D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAQ,uBAAuB;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,CAAC,sBAAsB,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,IAAI,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAU,wBAAwB;YACnE,MAAM,MAAM,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC,wBAAwB;YAE3E,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW;YACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,MAAM,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAc,wBAAwB;YAC1D,MAAM,MAAM,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,yBAAyB;YAE1D,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACzD,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,IAAI,GAAG,CAAC;;;;;EAKlB,CAAC,CAAC;YACE,MAAM,IAAI,GAAG,CAAC;;;;;;EAMlB,CAAC,CAAC;YACE,MAAM,MAAM,GAAG,CAAC;;;;;;EAMpB,CAAC,CAAC;YAEE,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,IAAI,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAG,oBAAoB;YACnE,MAAM,MAAM,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,kCAAkC;YAEjF,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAC1D,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,IAAI,GAAa,EAAE,CAAC,CAAC,0BAA0B;YACrD,MAAM,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,CAAC,2BAA2B,CAAC,CAAC;YAE7C,0DAA0D;YAC1D,sDAAsD;YACtD,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,2EAA2E;YAC3E,sDAAsD;YACtD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;gBACnD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YACD,4DAA4D;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAElC,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,qBAAqB;YACvD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACvD,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAElC,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAEnC,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAE7D,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;YACrF,4DAA4D;YAC5D,4FAA4F;YAC5F,8FAA8F;YAC9F,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;eAiBZ,CAAC;YACV,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YAErD,6DAA6D;YAC7D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAc,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,YAAY,GAAG;;;;;;;;;;EAUzB,CAAC;YACG,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YAEpD,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;YAC7F,4DAA4D;YAC5D,MAAM,YAAY,GAAG;;;;;;;;;;;;EAYzB,CAAC;YACG,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YAErD,8EAA8E;YAC9E,6DAA6D;YAC7D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,YAAY,GAAG;;;;;;;;;;;EAWzB,CAAC;YACG,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAElD,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;YACnD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,kEAAkE;AAClE,iCAAiC;AACjC,kEAAkE;AAElE,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,6DAA6D;IAE7D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,KAAK,GAAG;gBACZ,KAAK;gBACL,oBAAoB;gBACpB,kBAAkB;gBAClB,KAAK;gBACL,EAAE;gBACF,WAAW;aACZ,CAAC;YACF,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;YAC7C,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;YAC9B,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAE7D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG;gBACZ,UAAU;gBACV,gBAAgB;gBAChB,eAAe;gBACf,iBAAiB;gBACjB,sBAAsB;gBACtB,cAAc;gBACd,KAAK;aACN,CAAC;YACF,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YAEtC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW;YACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACtC,+DAA+D;YAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAE7D,QAAQ,CAAC,qDAAqD,EAAE,GAAG,EAAE;QACnE,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,IAAI,GAAG;gBACX,SAAS;gBACT,EAAE;gBACF,iBAAiB;gBACjB,iBAAiB;gBACjB,EAAE;gBACF,eAAe;gBACf,gBAAgB;aACjB,CAAC;YACF,MAAM,IAAI,GAAG;gBACX,SAAS;gBACT,EAAE;gBACF,iBAAiB;gBACjB,yBAAyB;gBACzB,EAAE;gBACF,eAAe;gBACf,gBAAgB;aACjB,CAAC;YACF,MAAM,MAAM,GAAG;gBACb,SAAS;gBACT,EAAE;gBACF,iBAAiB;gBACjB,iBAAiB;gBACjB,EAAE;gBACF,eAAe;gBACf,0BAA0B;aAC3B,CAAC;YAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE9D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,CAAI,aAAa;YACrE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAG,oBAAoB;YAC5E,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;YAEzF,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE9D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE9D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE9C,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE9D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,IAAI,GAAG;gBACX,KAAK;gBACL,cAAc;gBACd,KAAK;gBACL,EAAE;gBACF,WAAW;gBACX,QAAQ;aACT,CAAC;YACF,MAAM,IAAI,GAAG;gBACX,KAAK;gBACL,yBAAyB;gBACzB,KAAK;gBACL,EAAE;gBACF,WAAW;gBACX,QAAQ;aACT,CAAC;YACF,MAAM,MAAM,GAAG;gBACb,KAAK;gBACL,cAAc;gBACd,KAAK;gBACL,EAAE;gBACF,WAAW;gBACX,gBAAgB;aACjB,CAAC;YAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE9D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,sBAAsB;YACpE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAG,oBAAoB;QACpE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAE7D,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BR,CAAC;YAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEhD,2EAA2E;YAC3E,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC9C,CAAC;YACD,kDAAkD;YAClD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,kEAAkE;AAClE,mCAAmC;AACnC,kEAAkE;AAElE,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,IAAI,GAAG,QAAQ,CACnB,CAAC,UAAU,CAAC,EACZ,CAAC,kBAAkB,CAAC,EACpB,CAAC,kBAAkB,CAAC,CACrB,CAAC;YACF,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,IAAI,GAAG,QAAQ,CACnB,CAAC,WAAW,EAAE,UAAU,CAAC,EACzB,CAAC,WAAW,EAAE,eAAe,CAAC,EAC9B,CAAC,WAAW,EAAE,UAAU,CAAC,CAC1B,CAAC;YACF,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,IAAI,GAAG,QAAQ,CACnB,CAAC,UAAU,CAAC,EACZ,CAAC,kBAAkB,CAAC,EACpB,CAAC,kBAAkB,CAAC,CACrB,CAAC;YACF,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACpC,sDAAsD;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,2CAA2C;YAC3C,MAAM,IAAI,GAAG,QAAQ,CACnB,CAAC,UAAU,CAAC,EACZ,CAAC,UAAU,CAAC,EACZ,CAAC,UAAU,CAAC,CACb,CAAC;YACF,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports-extended.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/imports-extended.test.ts"],"names":[],"mappings":""}
|