@gitwand/core 2.2.0 → 2.3.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/dist/__tests__/structural/grandeur-nature.test.d.ts +31 -0
- package/dist/__tests__/structural/grandeur-nature.test.d.ts.map +1 -0
- package/dist/__tests__/structural/grandeur-nature.test.js +264 -0
- package/dist/__tests__/structural/grandeur-nature.test.js.map +1 -0
- package/dist/__tests__/structural/languages.test.d.ts +5 -0
- package/dist/__tests__/structural/languages.test.d.ts.map +1 -0
- package/dist/__tests__/structural/languages.test.js +74 -0
- package/dist/__tests__/structural/languages.test.js.map +1 -0
- package/dist/__tests__/structural/matching.test.d.ts +6 -0
- package/dist/__tests__/structural/matching.test.d.ts.map +1 -0
- package/dist/__tests__/structural/matching.test.js +113 -0
- package/dist/__tests__/structural/matching.test.js.map +1 -0
- package/dist/__tests__/structural/merge.test.d.ts +6 -0
- package/dist/__tests__/structural/merge.test.d.ts.map +1 -0
- package/dist/__tests__/structural/merge.test.js +117 -0
- package/dist/__tests__/structural/merge.test.js.map +1 -0
- package/dist/__tests__/structural/reconstruct.test.d.ts +6 -0
- package/dist/__tests__/structural/reconstruct.test.d.ts.map +1 -0
- package/dist/__tests__/structural/reconstruct.test.js +104 -0
- package/dist/__tests__/structural/reconstruct.test.js.map +1 -0
- package/dist/__tests__/structural/structural-index.test.d.ts +14 -0
- package/dist/__tests__/structural/structural-index.test.d.ts.map +1 -0
- package/dist/__tests__/structural/structural-index.test.js +108 -0
- package/dist/__tests__/structural/structural-index.test.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/resolver/index.d.ts +14 -0
- package/dist/resolver/index.d.ts.map +1 -1
- package/dist/resolver/index.js +29 -0
- package/dist/resolver/index.js.map +1 -1
- package/dist/resolvers/dispatcher.d.ts +17 -1
- package/dist/resolvers/dispatcher.d.ts.map +1 -1
- package/dist/resolvers/dispatcher.js.map +1 -1
- package/dist/structural/entities.d.ts +44 -0
- package/dist/structural/entities.d.ts.map +1 -0
- package/dist/structural/entities.js +315 -0
- package/dist/structural/entities.js.map +1 -0
- package/dist/structural/index.d.ts +48 -0
- package/dist/structural/index.d.ts.map +1 -0
- package/dist/structural/index.js +177 -0
- package/dist/structural/index.js.map +1 -0
- package/dist/structural/matching.d.ts +46 -0
- package/dist/structural/matching.d.ts.map +1 -0
- package/dist/structural/matching.js +83 -0
- package/dist/structural/matching.js.map +1 -0
- package/dist/structural/merge.d.ts +45 -0
- package/dist/structural/merge.d.ts.map +1 -0
- package/dist/structural/merge.js +127 -0
- package/dist/structural/merge.js.map +1 -0
- package/dist/structural/parsers/adapters/browser.d.ts +22 -0
- package/dist/structural/parsers/adapters/browser.d.ts.map +1 -0
- package/dist/structural/parsers/adapters/browser.js +27 -0
- package/dist/structural/parsers/adapters/browser.js.map +1 -0
- package/dist/structural/parsers/adapters/node.d.ts +18 -0
- package/dist/structural/parsers/adapters/node.d.ts.map +1 -0
- package/dist/structural/parsers/adapters/node.js +42 -0
- package/dist/structural/parsers/adapters/node.js.map +1 -0
- package/dist/structural/parsers/adapters/tauri.d.ts +26 -0
- package/dist/structural/parsers/adapters/tauri.d.ts.map +1 -0
- package/dist/structural/parsers/adapters/tauri.js +34 -0
- package/dist/structural/parsers/adapters/tauri.js.map +1 -0
- package/dist/structural/parsers/grammars/languages.d.ts +32 -0
- package/dist/structural/parsers/grammars/languages.d.ts.map +1 -0
- package/dist/structural/parsers/grammars/languages.js +73 -0
- package/dist/structural/parsers/grammars/languages.js.map +1 -0
- package/dist/structural/parsers/grammars/ts.d.ts +26 -0
- package/dist/structural/parsers/grammars/ts.d.ts.map +1 -0
- package/dist/structural/parsers/grammars/ts.js +46 -0
- package/dist/structural/parsers/grammars/ts.js.map +1 -0
- package/dist/structural/parsers/loader.d.ts +74 -0
- package/dist/structural/parsers/loader.d.ts.map +1 -0
- package/dist/structural/parsers/loader.js +181 -0
- package/dist/structural/parsers/loader.js.map +1 -0
- package/dist/structural/reconstruct.d.ts +28 -0
- package/dist/structural/reconstruct.d.ts.map +1 -0
- package/dist/structural/reconstruct.js +63 -0
- package/dist/structural/reconstruct.js.map +1 -0
- package/package.json +16 -2
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for structural/merge.ts — entity-level merge decisions.
|
|
3
|
+
* Pure logic, no tree-sitter / WASM dependency.
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect } from "vitest";
|
|
6
|
+
import { mergeEntity, hasEntityConflict } from "../../structural/merge.js";
|
|
7
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
8
|
+
function entity(text) {
|
|
9
|
+
return {
|
|
10
|
+
signature: "function:foo",
|
|
11
|
+
kind: "function",
|
|
12
|
+
text,
|
|
13
|
+
startByte: 0,
|
|
14
|
+
endByte: text.length,
|
|
15
|
+
startLine: 0,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function match(status, base, ours, theirs) {
|
|
19
|
+
return {
|
|
20
|
+
signature: "function:foo",
|
|
21
|
+
status,
|
|
22
|
+
base: base !== undefined ? entity(base) : null,
|
|
23
|
+
ours: ours !== undefined ? entity(ours) : null,
|
|
24
|
+
theirs: theirs !== undefined ? entity(theirs) : null,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// ─── Tests ────────────────────────────────────────────────────────────────────
|
|
28
|
+
describe("mergeEntity", () => {
|
|
29
|
+
it("unchanged → emit ours text (same as theirs)", () => {
|
|
30
|
+
const result = mergeEntity(match("unchanged", "fn()", "fn()", "fn()"));
|
|
31
|
+
expect(result.include).toBe(true);
|
|
32
|
+
expect(result.mergedText).toBe("fn()");
|
|
33
|
+
expect(result.reason).toBe("unchanged");
|
|
34
|
+
});
|
|
35
|
+
it("both-changed-same with text → emit theirs", () => {
|
|
36
|
+
const result = mergeEntity(match("both-changed-same", "fn()", "fn2()", "fn2()"));
|
|
37
|
+
expect(result.include).toBe(true);
|
|
38
|
+
expect(result.mergedText).toBe("fn2()");
|
|
39
|
+
});
|
|
40
|
+
it("both-changed-same with both deleted → exclude", () => {
|
|
41
|
+
const result = mergeEntity(match("both-changed-same", "fn()", undefined, undefined));
|
|
42
|
+
expect(result.include).toBe(false);
|
|
43
|
+
expect(result.mergedText).toBeNull();
|
|
44
|
+
expect(result.reason).toBe("both deleted");
|
|
45
|
+
});
|
|
46
|
+
it("ours-only-change → emit ours", () => {
|
|
47
|
+
const result = mergeEntity(match("ours-only-change", "fn()", "fn2()", "fn()"));
|
|
48
|
+
expect(result.include).toBe(true);
|
|
49
|
+
expect(result.mergedText).toBe("fn2()");
|
|
50
|
+
});
|
|
51
|
+
it("theirs-only-change → emit theirs", () => {
|
|
52
|
+
const result = mergeEntity(match("theirs-only-change", "fn()", "fn()", "fn3()"));
|
|
53
|
+
expect(result.include).toBe(true);
|
|
54
|
+
expect(result.mergedText).toBe("fn3()");
|
|
55
|
+
});
|
|
56
|
+
it("ours-added → include ours text", () => {
|
|
57
|
+
const result = mergeEntity(match("ours-added", undefined, "fn_new()", undefined));
|
|
58
|
+
expect(result.include).toBe(true);
|
|
59
|
+
expect(result.mergedText).toBe("fn_new()");
|
|
60
|
+
});
|
|
61
|
+
it("theirs-added → include theirs text", () => {
|
|
62
|
+
const result = mergeEntity(match("theirs-added", undefined, undefined, "fn_new()"));
|
|
63
|
+
expect(result.include).toBe(true);
|
|
64
|
+
expect(result.mergedText).toBe("fn_new()");
|
|
65
|
+
});
|
|
66
|
+
it("ours-deleted (theirs unchanged) → exclude", () => {
|
|
67
|
+
const result = mergeEntity(match("ours-deleted", "fn()", undefined, "fn()"));
|
|
68
|
+
expect(result.include).toBe(false);
|
|
69
|
+
expect(result.reason).toBe("ours deleted");
|
|
70
|
+
});
|
|
71
|
+
it("ours-deleted (theirs modified) → conflict", () => {
|
|
72
|
+
const result = mergeEntity(match("ours-deleted", "fn()", undefined, "fn3()"));
|
|
73
|
+
expect(result.include).toBe(false);
|
|
74
|
+
expect(result.reason).toContain("conflict:");
|
|
75
|
+
});
|
|
76
|
+
it("theirs-deleted (ours unchanged) → exclude", () => {
|
|
77
|
+
const result = mergeEntity(match("theirs-deleted", "fn()", "fn()", undefined));
|
|
78
|
+
expect(result.include).toBe(false);
|
|
79
|
+
expect(result.reason).toBe("theirs deleted");
|
|
80
|
+
});
|
|
81
|
+
it("theirs-deleted (ours modified) → conflict", () => {
|
|
82
|
+
const result = mergeEntity(match("theirs-deleted", "fn()", "fn2()", undefined));
|
|
83
|
+
expect(result.include).toBe(false);
|
|
84
|
+
expect(result.reason).toContain("conflict:");
|
|
85
|
+
});
|
|
86
|
+
it("both-changed-diff → conflict with null mergedText", () => {
|
|
87
|
+
const result = mergeEntity(match("both-changed-diff", "fn()", "fn1()", "fn2()"));
|
|
88
|
+
expect(result.include).toBe(false);
|
|
89
|
+
expect(result.mergedText).toBeNull();
|
|
90
|
+
expect(result.reason).toContain("conflict:");
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe("hasEntityConflict", () => {
|
|
94
|
+
it("returns false when all merges are clean", () => {
|
|
95
|
+
const merges = [
|
|
96
|
+
mergeEntity(match("unchanged", "a", "a", "a")),
|
|
97
|
+
mergeEntity(match("ours-added", undefined, "b", undefined)),
|
|
98
|
+
];
|
|
99
|
+
expect(hasEntityConflict(merges)).toBe(false);
|
|
100
|
+
});
|
|
101
|
+
it("returns true when any merge has a conflict", () => {
|
|
102
|
+
const merges = [
|
|
103
|
+
mergeEntity(match("unchanged", "a", "a", "a")),
|
|
104
|
+
mergeEntity(match("both-changed-diff", "a", "b", "c")),
|
|
105
|
+
];
|
|
106
|
+
expect(hasEntityConflict(merges)).toBe(true);
|
|
107
|
+
});
|
|
108
|
+
it("ours-deleted (unchanged theirs) is NOT a conflict", () => {
|
|
109
|
+
const merges = [mergeEntity(match("ours-deleted", "fn()", undefined, "fn()"))];
|
|
110
|
+
expect(hasEntityConflict(merges)).toBe(false);
|
|
111
|
+
});
|
|
112
|
+
it("ours-deleted (modified theirs) IS a conflict", () => {
|
|
113
|
+
const merges = [mergeEntity(match("ours-deleted", "fn()", undefined, "fn_modified()"))];
|
|
114
|
+
expect(hasEntityConflict(merges)).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=merge.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.test.js","sourceRoot":"","sources":["../../../src/__tests__/structural/merge.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconstruct.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/structural/reconstruct.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for structural/reconstruct.ts — file reconstruction from entity merges.
|
|
3
|
+
* Pure logic, no tree-sitter / WASM dependency.
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect } from "vitest";
|
|
6
|
+
import { reconstructFile } from "../../structural/reconstruct.js";
|
|
7
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
8
|
+
function makeEntity(sig, text, start) {
|
|
9
|
+
return {
|
|
10
|
+
signature: sig,
|
|
11
|
+
kind: "function",
|
|
12
|
+
text,
|
|
13
|
+
startByte: start,
|
|
14
|
+
endByte: start + text.length,
|
|
15
|
+
startLine: 0,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function included(sig, mergedText) {
|
|
19
|
+
return { signature: sig, include: true, mergedText, reason: "test" };
|
|
20
|
+
}
|
|
21
|
+
function excluded(sig) {
|
|
22
|
+
return { signature: sig, include: false, mergedText: null, reason: "deleted" };
|
|
23
|
+
}
|
|
24
|
+
// ─── Tests ────────────────────────────────────────────────────────────────────
|
|
25
|
+
describe("reconstructFile", () => {
|
|
26
|
+
it("emits a single entity verbatim", () => {
|
|
27
|
+
const source = "function foo() {}";
|
|
28
|
+
const e = makeEntity("function:foo", "function foo() {}", 0);
|
|
29
|
+
const result = reconstructFile([included("function:foo", "function foo() {}")], [e], [], source);
|
|
30
|
+
expect(result).toBe("function foo() {}");
|
|
31
|
+
});
|
|
32
|
+
it("preserves gap between two entities", () => {
|
|
33
|
+
const source = "function foo() {}\n\nfunction bar() {}";
|
|
34
|
+
const foo = makeEntity("function:foo", "function foo() {}", 0);
|
|
35
|
+
const bar = makeEntity("function:bar", "function bar() {}", 19);
|
|
36
|
+
const result = reconstructFile([
|
|
37
|
+
included("function:foo", "function foo() {}"),
|
|
38
|
+
included("function:bar", "function bar() {}"),
|
|
39
|
+
], [foo, bar], [], source);
|
|
40
|
+
expect(result).toBe(source);
|
|
41
|
+
});
|
|
42
|
+
it("uses merged text instead of theirs text when changed", () => {
|
|
43
|
+
const source = "function foo() {}";
|
|
44
|
+
const e = makeEntity("function:foo", "function foo() {}", 0);
|
|
45
|
+
const result = reconstructFile([included("function:foo", "function foo() { return 42; }")], [e], [], source);
|
|
46
|
+
expect(result).toBe("function foo() { return 42; }");
|
|
47
|
+
});
|
|
48
|
+
it("omits deleted entities while preserving surrounding gaps", () => {
|
|
49
|
+
// theirs: foo\n\nbar — bar is deleted
|
|
50
|
+
const source = "function foo() {}\n\nfunction bar() {}";
|
|
51
|
+
const foo = makeEntity("function:foo", "function foo() {}", 0);
|
|
52
|
+
const bar = makeEntity("function:bar", "function bar() {}", 19);
|
|
53
|
+
const result = reconstructFile([included("function:foo", "function foo() {}"), excluded("function:bar")], [foo, bar], [], source);
|
|
54
|
+
// The gap "\n\n" before bar is emitted, but bar's text is omitted
|
|
55
|
+
expect(result).toBe("function foo() {}\n\n");
|
|
56
|
+
});
|
|
57
|
+
it("appends ours-added entities after theirs content", () => {
|
|
58
|
+
const theirsSource = "function foo() {}";
|
|
59
|
+
const theirsFoo = makeEntity("function:foo", "function foo() {}", 0);
|
|
60
|
+
const oursBar = makeEntity("function:bar", "function bar() {}", 99);
|
|
61
|
+
const result = reconstructFile([
|
|
62
|
+
included("function:foo", "function foo() {}"),
|
|
63
|
+
included("function:bar", "function bar() {}"),
|
|
64
|
+
], [theirsFoo], [oursBar], theirsSource);
|
|
65
|
+
expect(result).toContain("function foo() {}");
|
|
66
|
+
expect(result).toContain("function bar() {}");
|
|
67
|
+
});
|
|
68
|
+
it("preserves trailing content from theirs source", () => {
|
|
69
|
+
const source = "function foo() {}\n// EOF\n";
|
|
70
|
+
const e = makeEntity("function:foo", "function foo() {}", 0);
|
|
71
|
+
const result = reconstructFile([included("function:foo", "function foo() {}")], [e], [], source);
|
|
72
|
+
expect(result).toBe("function foo() {}\n// EOF\n");
|
|
73
|
+
});
|
|
74
|
+
it("handles empty entity list", () => {
|
|
75
|
+
const result = reconstructFile([], [], [], "");
|
|
76
|
+
expect(result).toBe("");
|
|
77
|
+
});
|
|
78
|
+
it("does not double-emit entities that appear in both theirs and ours", () => {
|
|
79
|
+
const source = "function foo() {}";
|
|
80
|
+
const e = makeEntity("function:foo", "function foo() {}", 0);
|
|
81
|
+
const result = reconstructFile([included("function:foo", "function foo() {}")], [e], [e], // same entity in ours
|
|
82
|
+
source);
|
|
83
|
+
// Should appear exactly once
|
|
84
|
+
const count = (result.match(/function foo/g) ?? []).length;
|
|
85
|
+
expect(count).toBe(1);
|
|
86
|
+
});
|
|
87
|
+
it("handles reordered entities by following theirs order", () => {
|
|
88
|
+
// theirs order: bar then foo
|
|
89
|
+
const source = "function bar() {}\nfunction foo() {}";
|
|
90
|
+
const bar = makeEntity("function:bar", "function bar() {}", 0);
|
|
91
|
+
const foo = makeEntity("function:foo", "function foo() {}", 18);
|
|
92
|
+
const result = reconstructFile([
|
|
93
|
+
included("function:bar", "function bar() {}"),
|
|
94
|
+
included("function:foo", "function foo() {}"),
|
|
95
|
+
], [bar, foo], // theirs order
|
|
96
|
+
[foo, bar], // ours order (reversed)
|
|
97
|
+
source);
|
|
98
|
+
// Result should follow theirs order (bar before foo)
|
|
99
|
+
const barIdx = result.indexOf("function bar");
|
|
100
|
+
const fooIdx = result.indexOf("function foo");
|
|
101
|
+
expect(barIdx).toBeLessThan(fooIdx);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=reconstruct.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconstruct.test.js","sourceRoot":"","sources":["../../../src/__tests__/structural/reconstruct.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for structural/index.ts
|
|
3
|
+
*
|
|
4
|
+
* `tryStructuralMergeResolve` requires web-tree-sitter (optional peer),
|
|
5
|
+
* which is not installed in the test environment.
|
|
6
|
+
*
|
|
7
|
+
* These tests verify:
|
|
8
|
+
* - Graceful degradation when web-tree-sitter is absent (returns null).
|
|
9
|
+
* - The `isTypeScriptFile` / `isStructuralLanguage` guards.
|
|
10
|
+
* - `wrapStructuralResult` produces a valid MergeResult.
|
|
11
|
+
* - `reconstructVersions` (via the public API) extracts ours/theirs correctly.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=structural-index.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-index.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/structural/structural-index.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for structural/index.ts
|
|
3
|
+
*
|
|
4
|
+
* `tryStructuralMergeResolve` requires web-tree-sitter (optional peer),
|
|
5
|
+
* which is not installed in the test environment.
|
|
6
|
+
*
|
|
7
|
+
* These tests verify:
|
|
8
|
+
* - Graceful degradation when web-tree-sitter is absent (returns null).
|
|
9
|
+
* - The `isTypeScriptFile` / `isStructuralLanguage` guards.
|
|
10
|
+
* - `wrapStructuralResult` produces a valid MergeResult.
|
|
11
|
+
* - `reconstructVersions` (via the public API) extracts ours/theirs correctly.
|
|
12
|
+
*/
|
|
13
|
+
import { describe, it, expect } from "vitest";
|
|
14
|
+
import { tryStructuralMergeResolve, wrapStructuralResult, isTypeScriptFile, isStructuralLanguage, } from "../../structural/index.js";
|
|
15
|
+
// ─── isTypeScriptFile ─────────────────────────────────────────────────────────
|
|
16
|
+
describe("isTypeScriptFile", () => {
|
|
17
|
+
it("accepts .ts", () => expect(isTypeScriptFile("src/app.ts")).toBe(true));
|
|
18
|
+
it("accepts .tsx", () => expect(isTypeScriptFile("src/comp.tsx")).toBe(true));
|
|
19
|
+
it("rejects .d.ts", () => expect(isTypeScriptFile("types.d.ts")).toBe(false));
|
|
20
|
+
it("rejects .js", () => expect(isTypeScriptFile("src/app.js")).toBe(false));
|
|
21
|
+
});
|
|
22
|
+
// ─── isStructuralLanguage ─────────────────────────────────────────────────────
|
|
23
|
+
describe("isStructuralLanguage", () => {
|
|
24
|
+
it("accepts .ts, .tsx, .js, .jsx, .py, .go, .rs", () => {
|
|
25
|
+
for (const ext of [".ts", ".tsx", ".js", ".jsx", ".py", ".go", ".rs"]) {
|
|
26
|
+
expect(isStructuralLanguage(`src/file${ext}`)).toBe(true);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
it("rejects .d.ts", () => expect(isStructuralLanguage("types.d.ts")).toBe(false));
|
|
30
|
+
it("rejects .css", () => expect(isStructuralLanguage("style.css")).toBe(false));
|
|
31
|
+
});
|
|
32
|
+
// ─── tryStructuralMergeResolve — graceful degradation ────────────────────────
|
|
33
|
+
const SIMPLE_CONFLICT = `\
|
|
34
|
+
function foo() {
|
|
35
|
+
<<<<<<< ours
|
|
36
|
+
return 1;
|
|
37
|
+
||||||| base
|
|
38
|
+
return 0;
|
|
39
|
+
=======
|
|
40
|
+
return 2;
|
|
41
|
+
>>>>>>> theirs
|
|
42
|
+
}
|
|
43
|
+
`;
|
|
44
|
+
describe("tryStructuralMergeResolve", () => {
|
|
45
|
+
it("returns null for unsupported file types", async () => {
|
|
46
|
+
const result = await tryStructuralMergeResolve(SIMPLE_CONFLICT, "styles.css");
|
|
47
|
+
expect(result).toBeNull();
|
|
48
|
+
});
|
|
49
|
+
it("returns null for .d.ts files", async () => {
|
|
50
|
+
const result = await tryStructuralMergeResolve(SIMPLE_CONFLICT, "types.d.ts");
|
|
51
|
+
expect(result).toBeNull();
|
|
52
|
+
});
|
|
53
|
+
it("returns null gracefully when web-tree-sitter is not installed", async () => {
|
|
54
|
+
// web-tree-sitter is an optional peer dep — not installed in test env.
|
|
55
|
+
// The loader returns null, and tryStructuralMergeResolve returns null.
|
|
56
|
+
const result = await tryStructuralMergeResolve(SIMPLE_CONFLICT, "src/app.ts");
|
|
57
|
+
expect(result).toBeNull();
|
|
58
|
+
});
|
|
59
|
+
it("returns null gracefully for Python files too", async () => {
|
|
60
|
+
const result = await tryStructuralMergeResolve(SIMPLE_CONFLICT, "src/app.py");
|
|
61
|
+
expect(result).toBeNull();
|
|
62
|
+
});
|
|
63
|
+
it("never throws — always returns string | null", async () => {
|
|
64
|
+
await expect(tryStructuralMergeResolve(SIMPLE_CONFLICT, "src/app.ts")).resolves.not.toThrow();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
// ─── wrapStructuralResult ─────────────────────────────────────────────────────
|
|
68
|
+
describe("wrapStructuralResult", () => {
|
|
69
|
+
const conflicted = `// header\n<<<<<<< ours\nreturn 1;\n||||||| base\nreturn 0;\n=======\nreturn 2;\n>>>>>>> theirs\n// footer\n`;
|
|
70
|
+
const merged = "// header\nreturn 1;\n// footer\n";
|
|
71
|
+
it("returns filePath correctly", () => {
|
|
72
|
+
const result = wrapStructuralResult(conflicted, merged, "src/app.ts");
|
|
73
|
+
expect(result.filePath).toBe("src/app.ts");
|
|
74
|
+
});
|
|
75
|
+
it("sets mergedContent to the provided merged string", () => {
|
|
76
|
+
const result = wrapStructuralResult(conflicted, merged, "src/app.ts");
|
|
77
|
+
expect(result.mergedContent).toBe(merged);
|
|
78
|
+
});
|
|
79
|
+
it("marks all resolutions as autoResolved", () => {
|
|
80
|
+
const result = wrapStructuralResult(conflicted, merged, "src/app.ts");
|
|
81
|
+
expect(result.stats.totalConflicts).toBe(1);
|
|
82
|
+
expect(result.stats.autoResolved).toBe(1);
|
|
83
|
+
expect(result.stats.remaining).toBe(0);
|
|
84
|
+
for (const r of result.resolutions) {
|
|
85
|
+
expect(r.autoResolved).toBe(true);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
it("extracts the correct number of hunks", () => {
|
|
89
|
+
const twoConflicts = [
|
|
90
|
+
"<<<<<<< ours\na\n=======\nb\n>>>>>>> theirs",
|
|
91
|
+
"<<<<<<< ours\nc\n=======\nd\n>>>>>>> theirs",
|
|
92
|
+
].join("\n");
|
|
93
|
+
const result = wrapStructuralResult(twoConflicts, "merged", "src/app.ts");
|
|
94
|
+
expect(result.hunks).toHaveLength(2);
|
|
95
|
+
expect(result.stats.totalConflicts).toBe(2);
|
|
96
|
+
});
|
|
97
|
+
it("validation result is present and valid for a clean merged content", () => {
|
|
98
|
+
const result = wrapStructuralResult(conflicted, merged, "src/app.ts");
|
|
99
|
+
expect(result.validation.isValid).toBe(true);
|
|
100
|
+
expect(result.validation.hasResidualMarkers).toBe(false);
|
|
101
|
+
});
|
|
102
|
+
it("validation detects residual conflict markers if merged content has them", () => {
|
|
103
|
+
const result = wrapStructuralResult(conflicted, "<<<<<<< ours\nreturn 1;\n", "src/app.ts");
|
|
104
|
+
expect(result.validation.hasResidualMarkers).toBe(true);
|
|
105
|
+
expect(result.validation.isValid).toBe(false);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=structural-index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-index.test.js","sourceRoot":"","sources":["../../../src/__tests__/structural/structural-index.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -17,7 +17,11 @@
|
|
|
17
17
|
* }
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
|
-
export { resolve } from "./resolver.js";
|
|
20
|
+
export { resolve, resolveAsync } from "./resolver/index.js";
|
|
21
|
+
export { tryStructuralMergeResolve, isTypeScriptFile, // backward compat
|
|
22
|
+
isStructuralLanguage, // preferred
|
|
23
|
+
wrapStructuralResult, } from "./structural/index.js";
|
|
24
|
+
export type { StructuralLoaderOptions, SupportedLanguage } from "./structural/index.js";
|
|
21
25
|
export { parseConflictMarkers, classifyConflict } from "./parser.js";
|
|
22
26
|
export { mergeNonOverlapping, computeDiff, lcs } from "./diff.js";
|
|
23
27
|
export { histogramDiff, detectBlockMove, lcsLegacy, type HistogramOptions, type MovedBlock, type BlockMoveOptions, } from "./diff/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,7 +17,11 @@
|
|
|
17
17
|
* }
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
|
-
export { resolve } from "./resolver.js";
|
|
20
|
+
export { resolve, resolveAsync } from "./resolver/index.js";
|
|
21
|
+
// v2.3 — Merge structurel AST (tree-sitter) — TS/TSX/JS/JSX/Python/Go/Rust
|
|
22
|
+
export { tryStructuralMergeResolve, isTypeScriptFile, // backward compat
|
|
23
|
+
isStructuralLanguage, // preferred
|
|
24
|
+
wrapStructuralResult, } from "./structural/index.js";
|
|
21
25
|
export { parseConflictMarkers, classifyConflict } from "./parser.js";
|
|
22
26
|
export { mergeNonOverlapping, computeDiff, lcs } from "./diff.js";
|
|
23
27
|
// v2.1 — nouveaux backends diff exposés
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE5D,2EAA2E;AAC3E,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAAQ,kBAAkB;AAC1C,oBAAoB,EAAI,YAAY;AACpC,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAElE,wCAAwC;AACxC,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,GAIV,MAAM,iBAAiB,CAAC;AAEzB,kDAAkD;AAClD,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,eAAe,GAGhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,iCAAiC,CAAC;AAGzC,gDAAgD;AAChD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAExG,8EAA8E;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE1E,oEAAoE;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,8DAA8D;AAC9D,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,2BAA2B,CAAC"}
|
package/dist/resolver/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* `resolve` depuis `../resolver.js`.
|
|
15
15
|
*/
|
|
16
16
|
import type { GitWandOptions, MergeResult } from "../types.js";
|
|
17
|
+
import { type StructuralLoaderOptions } from "../structural/index.js";
|
|
17
18
|
/**
|
|
18
19
|
* Analyse et résout automatiquement les conflits d'un fichier.
|
|
19
20
|
*
|
|
@@ -23,4 +24,17 @@ import type { GitWandOptions, MergeResult } from "../types.js";
|
|
|
23
24
|
* @returns Le résultat de la résolution avec traces et validation
|
|
24
25
|
*/
|
|
25
26
|
export declare function resolve(conflictedContent: string, filePath: string, userOptions?: GitWandOptions): MergeResult;
|
|
27
|
+
/**
|
|
28
|
+
* Async variant of `resolve()` — attempts structural (AST-based) merge for
|
|
29
|
+
* TypeScript/TSX files before falling back to the standard hunk-by-hunk engine.
|
|
30
|
+
*
|
|
31
|
+
* Structural merge requires `web-tree-sitter` as an **optional** peer dependency.
|
|
32
|
+
* If it is not installed, `resolveAsync()` behaves identically to `resolve()`.
|
|
33
|
+
*
|
|
34
|
+
* @param conflictedContent - File content with Git conflict markers
|
|
35
|
+
* @param filePath - File path (format detection + grammar selection)
|
|
36
|
+
* @param userOptions - GitWand options (same as `resolve()`)
|
|
37
|
+
* @param structuralOpts - Optional tree-sitter loader overrides
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveAsync(conflictedContent: string, filePath: string, userOptions?: GitWandOptions, structuralOpts?: StructuralLoaderOptions): Promise<MergeResult>;
|
|
26
40
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAGV,cAAc,EAEd,WAAW,EAGZ,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAGV,cAAc,EAEd,WAAW,EAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAgEhC;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,iBAAiB,EAAE,MAAM,EACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,cAAmB,GAC/B,WAAW,CAgGb;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,iBAAiB,EAAE,MAAM,EACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,cAAmB,EAChC,cAAc,GAAE,uBAA4B,GAC3C,OAAO,CAAC,WAAW,CAAC,CAmBtB"}
|
package/dist/resolver/index.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* reste en place comme shim de re-export pour les consommateurs qui importent
|
|
14
14
|
* `resolve` depuis `../resolver.js`.
|
|
15
15
|
*/
|
|
16
|
+
import { tryStructuralMergeResolve, wrapStructuralResult, isStructuralLanguage, } from "../structural/index.js";
|
|
16
17
|
import { parseConflictMarkers, toConflictHunk } from "../parser.js";
|
|
17
18
|
import { EMPTY_VALIDATION, validateMergedContent } from "./validation.js";
|
|
18
19
|
import { isGeneratedFile, reclassifyIfGenerated } from "./generated-detection.js";
|
|
@@ -144,4 +145,32 @@ export function resolve(conflictedContent, filePath, userOptions = {}) {
|
|
|
144
145
|
validation,
|
|
145
146
|
};
|
|
146
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Async variant of `resolve()` — attempts structural (AST-based) merge for
|
|
150
|
+
* TypeScript/TSX files before falling back to the standard hunk-by-hunk engine.
|
|
151
|
+
*
|
|
152
|
+
* Structural merge requires `web-tree-sitter` as an **optional** peer dependency.
|
|
153
|
+
* If it is not installed, `resolveAsync()` behaves identically to `resolve()`.
|
|
154
|
+
*
|
|
155
|
+
* @param conflictedContent - File content with Git conflict markers
|
|
156
|
+
* @param filePath - File path (format detection + grammar selection)
|
|
157
|
+
* @param userOptions - GitWand options (same as `resolve()`)
|
|
158
|
+
* @param structuralOpts - Optional tree-sitter loader overrides
|
|
159
|
+
*/
|
|
160
|
+
export async function resolveAsync(conflictedContent, filePath, userOptions = {}, structuralOpts = {}) {
|
|
161
|
+
// Attempt structural merge for all supported languages (TS/JS/Python/Go/Rust…)
|
|
162
|
+
if (isStructuralLanguage(filePath)) {
|
|
163
|
+
try {
|
|
164
|
+
const merged = await tryStructuralMergeResolve(conflictedContent, filePath, structuralOpts);
|
|
165
|
+
if (merged !== null) {
|
|
166
|
+
return wrapStructuralResult(conflictedContent, merged, filePath);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// Structural merge failed unexpectedly — fall through to hunk-based resolver
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Fall back to the synchronous hunk-based resolver
|
|
174
|
+
return resolve(conflictedContent, filePath, userOptions);
|
|
175
|
+
}
|
|
147
176
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,7 +62,23 @@ export interface FormatResolveResult {
|
|
|
62
62
|
*/
|
|
63
63
|
reason: string;
|
|
64
64
|
/** Résolveur utilisé (pour la trace) */
|
|
65
|
-
resolverUsed: "json" | "markdown" | "yaml" | "imports" | "vue" | "css" | "lockfile-npm" | "lockfile-yarn" | "lockfile-pnpm" | "cargo" | "dotenv" | "dockerfile" | "none";
|
|
65
|
+
resolverUsed: "json" | "markdown" | "yaml" | "imports" | "vue" | "css" | "lockfile-npm" | "lockfile-yarn" | "lockfile-pnpm" | "cargo" | "dotenv" | "dockerfile" | "structural" | "none";
|
|
66
|
+
/**
|
|
67
|
+
* v2.3 — Portée de la résolution.
|
|
68
|
+
*
|
|
69
|
+
* - `"hunk"` (défaut implicite) : `lines` remplace uniquement le hunk courant.
|
|
70
|
+
* - `"file"` : `fileContent` remplace **l'intégralité** du fichier
|
|
71
|
+
* (court-circuite le découpage hunk). Utilisé par le résolveur structurel.
|
|
72
|
+
*
|
|
73
|
+
* Quand `scope === "file"`, le pipeline de `resolve()` / `resolveAsync()`
|
|
74
|
+
* doit interpréter `fileContent` plutôt que `lines`.
|
|
75
|
+
*/
|
|
76
|
+
scope?: "hunk" | "file";
|
|
77
|
+
/**
|
|
78
|
+
* v2.3 — Contenu complet du fichier fusionné.
|
|
79
|
+
* Présent uniquement si `scope === "file"`.
|
|
80
|
+
*/
|
|
81
|
+
fileContent?: string;
|
|
66
82
|
}
|
|
67
83
|
/**
|
|
68
84
|
* Tente de résoudre un hunk de conflit avec le résolveur approprié
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/resolvers/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgBhD,8CAA8C;AAC9C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,qDAAqD;AACrD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAID,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/resolvers/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgBhD,8CAA8C;AAC9C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,qDAAqD;AACrD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAID,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC;IACxL;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC,mBAAmB,CAoRrB"}
|