sf-git-merge-driver 1.4.0-dev-156.21254415558-1 → 1.4.0-dev-159.21317248282-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -6
- package/lib/commands/git/merge/driver/run.js +3 -5
- package/lib/commands/git/merge/driver/run.js.map +1 -1
- package/lib/constant/conflictConstant.d.ts +3 -3
- package/lib/constant/conflictConstant.js +3 -3
- package/lib/constant/conflictConstant.js.map +1 -1
- package/lib/constant/parserConstant.d.ts +6 -0
- package/lib/constant/parserConstant.js +6 -0
- package/lib/constant/parserConstant.js.map +1 -1
- package/lib/driver/MergeDriver.d.ts +3 -0
- package/lib/driver/MergeDriver.js +5 -1
- package/lib/driver/MergeDriver.js.map +1 -1
- package/lib/merger/ConflictMarkerBuilder.d.ts +3 -0
- package/lib/merger/ConflictMarkerBuilder.js +33 -0
- package/lib/merger/ConflictMarkerBuilder.js.map +1 -0
- package/lib/merger/ConflictMarkerFormatter.d.ts +14 -0
- package/lib/merger/ConflictMarkerFormatter.js +43 -0
- package/lib/merger/ConflictMarkerFormatter.js.map +1 -0
- package/lib/merger/JsonMerger.d.ts +3 -0
- package/lib/merger/JsonMerger.js +20 -212
- package/lib/merger/JsonMerger.js.map +1 -1
- package/lib/merger/MergeContext.d.ts +17 -0
- package/lib/merger/MergeContext.js +2 -0
- package/lib/merger/MergeContext.js.map +1 -0
- package/lib/merger/MergeOrchestrator.d.ts +13 -0
- package/lib/merger/MergeOrchestrator.js +46 -0
- package/lib/merger/MergeOrchestrator.js.map +1 -0
- package/lib/merger/MergeScenarioFactory.d.ts +2 -0
- package/lib/merger/MergeScenarioFactory.js +22 -0
- package/lib/merger/MergeScenarioFactory.js.map +1 -0
- package/lib/merger/XmlMerger.d.ts +5 -0
- package/lib/merger/XmlMerger.js +19 -16
- package/lib/merger/XmlMerger.js.map +1 -1
- package/lib/merger/nodes/KeyedArrayMergeNode.d.ts +12 -0
- package/lib/merger/nodes/KeyedArrayMergeNode.js +67 -0
- package/lib/merger/nodes/KeyedArrayMergeNode.js.map +1 -0
- package/lib/merger/nodes/MergeNode.d.ts +5 -0
- package/lib/merger/nodes/MergeNode.js +2 -0
- package/lib/merger/nodes/MergeNode.js.map +1 -0
- package/lib/merger/nodes/MergeNodeFactory.d.ts +9 -0
- package/lib/merger/nodes/MergeNodeFactory.js +21 -0
- package/lib/merger/nodes/MergeNodeFactory.js.map +1 -0
- package/lib/merger/nodes/ObjectMergeNode.d.ts +20 -0
- package/lib/merger/nodes/ObjectMergeNode.js +49 -0
- package/lib/merger/nodes/ObjectMergeNode.js.map +1 -0
- package/lib/merger/nodes/TextArrayMergeNode.d.ts +12 -0
- package/lib/merger/nodes/TextArrayMergeNode.js +66 -0
- package/lib/merger/nodes/TextArrayMergeNode.js.map +1 -0
- package/lib/merger/nodes/TextMergeNode.d.ts +12 -0
- package/lib/merger/nodes/TextMergeNode.js +36 -0
- package/lib/merger/nodes/TextMergeNode.js.map +1 -0
- package/lib/merger/nodes/nodeUtils.d.ts +5 -0
- package/lib/merger/nodes/nodeUtils.js +20 -0
- package/lib/merger/nodes/nodeUtils.js.map +1 -0
- package/lib/merger/strategies/AllPresentStrategy.d.ts +7 -0
- package/lib/merger/strategies/AllPresentStrategy.js +36 -0
- package/lib/merger/strategies/AllPresentStrategy.js.map +1 -0
- package/lib/merger/strategies/AncestorAndLocalStrategy.d.ts +8 -0
- package/lib/merger/strategies/AncestorAndLocalStrategy.js +64 -0
- package/lib/merger/strategies/AncestorAndLocalStrategy.js.map +1 -0
- package/lib/merger/strategies/AncestorAndOtherStrategy.d.ts +8 -0
- package/lib/merger/strategies/AncestorAndOtherStrategy.js +64 -0
- package/lib/merger/strategies/AncestorAndOtherStrategy.js.map +1 -0
- package/lib/merger/strategies/AncestorOnlyStrategy.d.ts +6 -0
- package/lib/merger/strategies/AncestorOnlyStrategy.js +19 -0
- package/lib/merger/strategies/AncestorOnlyStrategy.js.map +1 -0
- package/lib/merger/strategies/LocalAndOtherStrategy.d.ts +7 -0
- package/lib/merger/strategies/LocalAndOtherStrategy.js +45 -0
- package/lib/merger/strategies/LocalAndOtherStrategy.js.map +1 -0
- package/lib/merger/strategies/LocalOnlyStrategy.d.ts +6 -0
- package/lib/merger/strategies/LocalOnlyStrategy.js +14 -0
- package/lib/merger/strategies/LocalOnlyStrategy.js.map +1 -0
- package/lib/merger/strategies/NoneStrategy.d.ts +6 -0
- package/lib/merger/strategies/NoneStrategy.js +8 -0
- package/lib/merger/strategies/NoneStrategy.js.map +1 -0
- package/lib/merger/strategies/OtherOnlyStrategy.d.ts +6 -0
- package/lib/merger/strategies/OtherOnlyStrategy.js +14 -0
- package/lib/merger/strategies/OtherOnlyStrategy.js.map +1 -0
- package/lib/merger/strategies/ScenarioStrategy.d.ts +5 -0
- package/lib/merger/strategies/ScenarioStrategy.js +2 -0
- package/lib/merger/strategies/ScenarioStrategy.js.map +1 -0
- package/lib/merger/strategies/ScenarioStrategyFactory.d.ts +3 -0
- package/lib/merger/strategies/ScenarioStrategyFactory.js +23 -0
- package/lib/merger/strategies/ScenarioStrategyFactory.js.map +1 -0
- package/lib/merger/strategies/TextMergeStrategy.d.ts +32 -0
- package/lib/merger/strategies/TextMergeStrategy.js +80 -0
- package/lib/merger/strategies/TextMergeStrategy.js.map +1 -0
- package/lib/service/NamespaceHandler.js +1 -2
- package/lib/service/NamespaceHandler.js.map +1 -1
- package/lib/types/conflictTypes.d.ts +1 -1
- package/lib/types/mergeResult.d.ts +8 -0
- package/lib/types/mergeResult.js +33 -0
- package/lib/types/mergeResult.js.map +1 -0
- package/lib/types/mergeScenario.d.ts +0 -1
- package/lib/types/mergeScenario.js +0 -20
- package/lib/types/mergeScenario.js.map +1 -1
- package/lib/utils/mergeUtils.d.ts +0 -5
- package/lib/utils/mergeUtils.js +0 -14
- package/lib/utils/mergeUtils.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/oclif.manifest.json +4 -4
- package/package.json +2 -2
- package/lib/merger/conflictMarker.d.ts +0 -12
- package/lib/merger/conflictMarker.js +0 -48
- package/lib/merger/conflictMarker.js.map +0 -1
- package/lib/merger/textAttribute.d.ts +0 -3
- package/lib/merger/textAttribute.js +0 -56
- package/lib/merger/textAttribute.js.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { combineResults } from '../../types/mergeResult.js';
|
|
2
|
+
import { getUniqueSortedProps } from '../nodes/nodeUtils.js';
|
|
3
|
+
export class AllPresentStrategy {
|
|
4
|
+
execute(context) {
|
|
5
|
+
const result = this.mergeChildren(context);
|
|
6
|
+
// Root level: wrap result with key
|
|
7
|
+
if (context.rootKey) {
|
|
8
|
+
if (result.output.length > 0) {
|
|
9
|
+
return {
|
|
10
|
+
output: [{ [context.rootKey.name]: result.output }],
|
|
11
|
+
hasConflict: result.hasConflict,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
// Empty result but key exists - preserve empty key
|
|
15
|
+
return {
|
|
16
|
+
output: [{ [context.rootKey.name]: [] }],
|
|
17
|
+
hasConflict: result.hasConflict,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
mergeChildren(context) {
|
|
23
|
+
const ancestor = context.ancestor;
|
|
24
|
+
const local = context.local;
|
|
25
|
+
const other = context.other;
|
|
26
|
+
const props = getUniqueSortedProps(ancestor, local, other);
|
|
27
|
+
const results = [];
|
|
28
|
+
for (const key of props) {
|
|
29
|
+
const childNode = context.nodeFactory.createNode(ancestor[key], local[key], other[key], key);
|
|
30
|
+
const childResult = childNode.merge(context.config);
|
|
31
|
+
results.push(childResult);
|
|
32
|
+
}
|
|
33
|
+
return combineResults(results);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=AllPresentStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AllPresentStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AllPresentStrategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAG5D,MAAM,OAAO,kBAAkB;IAC7B,OAAO,CAAC,OAAqB;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAE1C,mCAAmC;QACnC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO;oBACL,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnD,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAA;YACH,CAAC;YACD,mDAAmD;YACnD,OAAO;gBACL,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;gBACxC,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAA;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,aAAa,CAAC,OAAqB;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAkC,CAAA;QAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAkB,EAAE,CAAA;QAEjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAC9C,QAAQ,CAAC,GAAG,CAAC,EACb,KAAK,CAAC,GAAG,CAAC,EACV,KAAK,CAAC,GAAG,CAAC,EACV,GAAG,CACJ,CAAA;YACD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACnD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3B,CAAC;QAED,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MergeResult } from '../../types/mergeResult.js';
|
|
2
|
+
import type { MergeContext } from '../MergeContext.js';
|
|
3
|
+
import type { ScenarioStrategy } from './ScenarioStrategy.js';
|
|
4
|
+
export declare class AncestorAndLocalStrategy implements ScenarioStrategy {
|
|
5
|
+
execute(context: MergeContext): MergeResult;
|
|
6
|
+
private executeNested;
|
|
7
|
+
private executeWithAttribute;
|
|
8
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { deepEqual } from 'fast-equals';
|
|
2
|
+
import { noConflict, withConflict } from '../../types/mergeResult.js';
|
|
3
|
+
import { buildConflictMarkers } from '../ConflictMarkerBuilder.js';
|
|
4
|
+
import { MergeOrchestrator } from '../MergeOrchestrator.js';
|
|
5
|
+
import { toJsonArray } from '../nodes/nodeUtils.js';
|
|
6
|
+
const extractContent = (arr) => {
|
|
7
|
+
return (arr.length === 1 ? arr[0] : arr);
|
|
8
|
+
};
|
|
9
|
+
export class AncestorAndLocalStrategy {
|
|
10
|
+
execute(context) {
|
|
11
|
+
const localUnchanged = deepEqual(context.ancestor, context.local);
|
|
12
|
+
// Root level handling
|
|
13
|
+
if (context.rootKey) {
|
|
14
|
+
const { name, existsInOther } = context.rootKey;
|
|
15
|
+
// Other key missing and local unchanged = other deletion wins
|
|
16
|
+
if (!existsInOther && localUnchanged) {
|
|
17
|
+
return noConflict([]);
|
|
18
|
+
}
|
|
19
|
+
// Other key missing and local changed = conflict at root level
|
|
20
|
+
if (!existsInOther && !localUnchanged) {
|
|
21
|
+
const localObj = {
|
|
22
|
+
[name]: toJsonArray(context.local),
|
|
23
|
+
};
|
|
24
|
+
const ancestorObj = {
|
|
25
|
+
[name]: toJsonArray(context.ancestor),
|
|
26
|
+
};
|
|
27
|
+
return withConflict(buildConflictMarkers(context.config, localObj, ancestorObj, {}));
|
|
28
|
+
}
|
|
29
|
+
// Other key exists with empty value - delegate to nested merge, wrap result
|
|
30
|
+
const result = this.executeNested(context);
|
|
31
|
+
if (result.output.length > 0) {
|
|
32
|
+
return {
|
|
33
|
+
output: [{ [name]: result.output }],
|
|
34
|
+
hasConflict: result.hasConflict,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Empty result but key exists - preserve empty key
|
|
38
|
+
return noConflict([{ [name]: [] }]);
|
|
39
|
+
}
|
|
40
|
+
// Nested level: local unchanged means return empty (other deleted)
|
|
41
|
+
if (localUnchanged) {
|
|
42
|
+
return noConflict([]);
|
|
43
|
+
}
|
|
44
|
+
// Nested level with attribute (keyed array element)
|
|
45
|
+
if (context.attribute) {
|
|
46
|
+
return this.executeWithAttribute(context);
|
|
47
|
+
}
|
|
48
|
+
// Nested level conflict
|
|
49
|
+
return withConflict(buildConflictMarkers(context.config, extractContent(toJsonArray(context.local)), extractContent(toJsonArray(context.ancestor)), {}));
|
|
50
|
+
}
|
|
51
|
+
executeNested(context) {
|
|
52
|
+
const orchestrator = new MergeOrchestrator(context.config, context.nodeFactory);
|
|
53
|
+
return orchestrator.merge(context.ancestor, context.local, context.other);
|
|
54
|
+
}
|
|
55
|
+
executeWithAttribute(context) {
|
|
56
|
+
const orchestrator = new MergeOrchestrator(context.config, context.nodeFactory);
|
|
57
|
+
const localResult = orchestrator.merge({}, context.local, {}, undefined);
|
|
58
|
+
const ancestorResult = orchestrator.merge({}, context.ancestor, {}, undefined);
|
|
59
|
+
const localProp = { [context.attribute]: localResult.output };
|
|
60
|
+
const ancestorProp = { [context.attribute]: ancestorResult.output };
|
|
61
|
+
return withConflict(buildConflictMarkers(context.config, localProp, ancestorProp, {}));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=AncestorAndLocalStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AncestorAndLocalStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorAndLocalStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,MAAM,cAAc,GAAG,CAAC,GAAc,EAA0B,EAAE;IAChE,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAA2B,CAAA;AACpE,CAAC,CAAA;AAED,MAAM,OAAO,wBAAwB;IACnC,OAAO,CAAC,OAAqB;QAC3B,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAEjE,sBAAsB;QACtB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,CAAA;YAE/C,8DAA8D;YAC9D,IAAI,CAAC,aAAa,IAAI,cAAc,EAAE,CAAC;gBACrC,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;YACvB,CAAC;YAED,+DAA+D;YAC/D,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG;oBACf,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAA+B,CAAC;iBAC7D,CAAA;gBACD,MAAM,WAAW,GAAG;oBAClB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,QAAkC,CAAC;iBAChE,CAAA;gBACD,OAAO,YAAY,CACjB,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAChE,CAAA;YACH,CAAC;YAED,4EAA4E;YAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO;oBACL,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnC,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAA;YACH,CAAC;YACD,mDAAmD;YACnD,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,mEAAmE;QACnE,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;QACvB,CAAC;QAED,oDAAoD;QACpD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAA;QAC3C,CAAC;QAED,wBAAwB;QACxB,OAAO,YAAY,CACjB,oBAAoB,CAClB,OAAO,CAAC,MAAM,EACd,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,KAA+B,CAAC,CAAC,EACpE,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,QAAkC,CAAC,CAAC,EACvE,EAAE,CACH,CACF,CAAA;IACH,CAAC;IAEO,aAAa,CAAC,OAAqB;QACzC,MAAM,YAAY,GAAG,IAAI,iBAAiB,CACxC,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,WAAW,CACpB,CAAA;QACD,OAAO,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3E,CAAC;IAEO,oBAAoB,CAAC,OAAqB;QAChD,MAAM,YAAY,GAAG,IAAI,iBAAiB,CACxC,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,WAAW,CACpB,CAAA;QACD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;QACxE,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CACvC,EAAE,EACF,OAAO,CAAC,QAAQ,EAChB,EAAE,EACF,SAAS,CACV,CAAA;QAED,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,SAAU,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,CAAA;QAC9D,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,SAAU,CAAC,EAAE,cAAc,CAAC,MAAM,EAAE,CAAA;QAEpE,OAAO,YAAY,CACjB,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC,CAClE,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MergeResult } from '../../types/mergeResult.js';
|
|
2
|
+
import type { MergeContext } from '../MergeContext.js';
|
|
3
|
+
import type { ScenarioStrategy } from './ScenarioStrategy.js';
|
|
4
|
+
export declare class AncestorAndOtherStrategy implements ScenarioStrategy {
|
|
5
|
+
execute(context: MergeContext): MergeResult;
|
|
6
|
+
private executeNested;
|
|
7
|
+
private executeWithAttribute;
|
|
8
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { deepEqual } from 'fast-equals';
|
|
2
|
+
import { noConflict, withConflict } from '../../types/mergeResult.js';
|
|
3
|
+
import { buildConflictMarkers } from '../ConflictMarkerBuilder.js';
|
|
4
|
+
import { MergeOrchestrator } from '../MergeOrchestrator.js';
|
|
5
|
+
import { toJsonArray } from '../nodes/nodeUtils.js';
|
|
6
|
+
const extractContent = (arr) => {
|
|
7
|
+
return (arr.length === 1 ? arr[0] : arr);
|
|
8
|
+
};
|
|
9
|
+
export class AncestorAndOtherStrategy {
|
|
10
|
+
execute(context) {
|
|
11
|
+
const otherUnchanged = deepEqual(context.ancestor, context.other);
|
|
12
|
+
// Root level handling
|
|
13
|
+
if (context.rootKey) {
|
|
14
|
+
const { name, existsInLocal } = context.rootKey;
|
|
15
|
+
// Local key missing and other unchanged = local deletion wins
|
|
16
|
+
if (!existsInLocal && otherUnchanged) {
|
|
17
|
+
return noConflict([]);
|
|
18
|
+
}
|
|
19
|
+
// Local key missing and other changed = conflict at root level
|
|
20
|
+
if (!existsInLocal && !otherUnchanged) {
|
|
21
|
+
const ancestorObj = {
|
|
22
|
+
[name]: toJsonArray(context.ancestor),
|
|
23
|
+
};
|
|
24
|
+
const otherObj = {
|
|
25
|
+
[name]: toJsonArray(context.other),
|
|
26
|
+
};
|
|
27
|
+
return withConflict(buildConflictMarkers(context.config, {}, ancestorObj, otherObj));
|
|
28
|
+
}
|
|
29
|
+
// Local key exists with empty value - delegate to nested merge, wrap result
|
|
30
|
+
const result = this.executeNested(context);
|
|
31
|
+
if (result.output.length > 0) {
|
|
32
|
+
return {
|
|
33
|
+
output: [{ [name]: result.output }],
|
|
34
|
+
hasConflict: result.hasConflict,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Empty result but key exists - preserve empty key
|
|
38
|
+
return noConflict([{ [name]: [] }]);
|
|
39
|
+
}
|
|
40
|
+
// Nested level: other unchanged means return empty (local deleted)
|
|
41
|
+
if (otherUnchanged) {
|
|
42
|
+
return noConflict([]);
|
|
43
|
+
}
|
|
44
|
+
// Nested level with attribute (keyed array element)
|
|
45
|
+
if (context.attribute) {
|
|
46
|
+
return this.executeWithAttribute(context);
|
|
47
|
+
}
|
|
48
|
+
// Nested level conflict
|
|
49
|
+
return withConflict(buildConflictMarkers(context.config, {}, extractContent(toJsonArray(context.ancestor)), extractContent(toJsonArray(context.other))));
|
|
50
|
+
}
|
|
51
|
+
executeNested(context) {
|
|
52
|
+
const orchestrator = new MergeOrchestrator(context.config, context.nodeFactory);
|
|
53
|
+
return orchestrator.merge(context.ancestor, context.local, context.other);
|
|
54
|
+
}
|
|
55
|
+
executeWithAttribute(context) {
|
|
56
|
+
const orchestrator = new MergeOrchestrator(context.config, context.nodeFactory);
|
|
57
|
+
const ancestorResult = orchestrator.merge({}, context.ancestor, {}, undefined);
|
|
58
|
+
const otherResult = orchestrator.merge({}, {}, context.other, undefined);
|
|
59
|
+
const ancestorProp = { [context.attribute]: ancestorResult.output };
|
|
60
|
+
const otherProp = { [context.attribute]: otherResult.output };
|
|
61
|
+
return withConflict(buildConflictMarkers(context.config, {}, ancestorProp, otherProp));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=AncestorAndOtherStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AncestorAndOtherStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorAndOtherStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MergeResult } from '../../types/mergeResult.js';
|
|
2
|
+
import type { MergeContext } from '../MergeContext.js';
|
|
3
|
+
import type { ScenarioStrategy } from './ScenarioStrategy.js';
|
|
4
|
+
export declare class AncestorOnlyStrategy implements ScenarioStrategy {
|
|
5
|
+
execute(context: MergeContext): MergeResult;
|
|
6
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { noConflict } from '../../types/mergeResult.js';
|
|
2
|
+
export class AncestorOnlyStrategy {
|
|
3
|
+
execute(context) {
|
|
4
|
+
// ANCESTOR_ONLY: deleted in both local and other
|
|
5
|
+
// Root level: check if key should exist in result
|
|
6
|
+
if (context.rootKey) {
|
|
7
|
+
const { name, existsInLocal, existsInOther } = context.rootKey;
|
|
8
|
+
if (existsInLocal || existsInOther) {
|
|
9
|
+
// Key exists with empty value - preserve empty key
|
|
10
|
+
return noConflict([{ [name]: [] }]);
|
|
11
|
+
}
|
|
12
|
+
// Key completely deleted - return nothing
|
|
13
|
+
return noConflict([]);
|
|
14
|
+
}
|
|
15
|
+
// Nested level: return empty (deleted)
|
|
16
|
+
return noConflict([]);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=AncestorOnlyStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AncestorOnlyStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorOnlyStrategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAIvD,MAAM,OAAO,oBAAoB;IAC/B,OAAO,CAAC,OAAqB;QAC3B,iDAAiD;QAEjD,kDAAkD;QAClD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,CAAA;YAC9D,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;gBACnC,mDAAmD;gBACnD,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;YACrC,CAAC;YACD,0CAA0C;YAC1C,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;QACvB,CAAC;QAED,uCAAuC;QACvC,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MergeResult } from '../../types/mergeResult.js';
|
|
2
|
+
import type { MergeContext } from '../MergeContext.js';
|
|
3
|
+
import type { ScenarioStrategy } from './ScenarioStrategy.js';
|
|
4
|
+
export declare class LocalAndOtherStrategy implements ScenarioStrategy {
|
|
5
|
+
execute(context: MergeContext): MergeResult;
|
|
6
|
+
private mergeChildren;
|
|
7
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { deepEqual } from 'fast-equals';
|
|
2
|
+
import { combineResults, noConflict } from '../../types/mergeResult.js';
|
|
3
|
+
import { getUniqueSortedProps, toJsonArray } from '../nodes/nodeUtils.js';
|
|
4
|
+
export class LocalAndOtherStrategy {
|
|
5
|
+
execute(context) {
|
|
6
|
+
const local = context.local;
|
|
7
|
+
const other = context.other;
|
|
8
|
+
// If identical, return other
|
|
9
|
+
if (deepEqual(local, other)) {
|
|
10
|
+
const content = toJsonArray(other);
|
|
11
|
+
// Root level: wrap with key
|
|
12
|
+
if (context.rootKey) {
|
|
13
|
+
return noConflict([{ [context.rootKey.name]: content }]);
|
|
14
|
+
}
|
|
15
|
+
return noConflict(content);
|
|
16
|
+
}
|
|
17
|
+
// Different - merge children
|
|
18
|
+
const result = this.mergeChildren(context);
|
|
19
|
+
// Root level: wrap result with key
|
|
20
|
+
if (context.rootKey) {
|
|
21
|
+
if (result.output.length > 0) {
|
|
22
|
+
return {
|
|
23
|
+
output: [{ [context.rootKey.name]: result.output }],
|
|
24
|
+
hasConflict: result.hasConflict,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// Empty result but keys exist - preserve empty key
|
|
28
|
+
return noConflict([{ [context.rootKey.name]: [] }]);
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
mergeChildren(context) {
|
|
33
|
+
const local = context.local;
|
|
34
|
+
const other = context.other;
|
|
35
|
+
const props = getUniqueSortedProps({}, local, other);
|
|
36
|
+
const results = [];
|
|
37
|
+
for (const key of props) {
|
|
38
|
+
const childNode = context.nodeFactory.createNode(undefined, local[key], other[key], key);
|
|
39
|
+
const childResult = childNode.merge(context.config);
|
|
40
|
+
results.push(childResult);
|
|
41
|
+
}
|
|
42
|
+
return combineResults(results);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=LocalAndOtherStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalAndOtherStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/LocalAndOtherStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGzE,MAAM,OAAO,qBAAqB;IAChC,OAAO,CAAC,OAAqB;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QAErD,6BAA6B;QAC7B,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;YAElC,4BAA4B;YAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;YAC1D,CAAC;YAED,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;QAED,6BAA6B;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAE1C,mCAAmC;QACnC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO;oBACL,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnD,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAA;YACH,CAAC;YACD,mDAAmD;YACnD,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACrD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,aAAa,CAAC,OAAqB;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QACpD,MAAM,OAAO,GAAkB,EAAE,CAAA;QAEjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAC9C,SAAkB,EAClB,KAAK,CAAC,GAAG,CAAC,EACV,KAAK,CAAC,GAAG,CAAC,EACV,GAAG,CACJ,CAAA;YACD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACnD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3B,CAAC;QAED,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MergeResult } from '../../types/mergeResult.js';
|
|
2
|
+
import type { MergeContext } from '../MergeContext.js';
|
|
3
|
+
import type { ScenarioStrategy } from './ScenarioStrategy.js';
|
|
4
|
+
export declare class LocalOnlyStrategy implements ScenarioStrategy {
|
|
5
|
+
execute(context: MergeContext): MergeResult;
|
|
6
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { noConflict } from '../../types/mergeResult.js';
|
|
2
|
+
import { toJsonArray } from '../nodes/nodeUtils.js';
|
|
3
|
+
export class LocalOnlyStrategy {
|
|
4
|
+
execute(context) {
|
|
5
|
+
const content = toJsonArray(context.local);
|
|
6
|
+
// Root level: wrap with key
|
|
7
|
+
if (context.rootKey) {
|
|
8
|
+
return noConflict([{ [context.rootKey.name]: content }]);
|
|
9
|
+
}
|
|
10
|
+
// Nested level: return content for parent to wrap
|
|
11
|
+
return noConflict(content);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=LocalOnlyStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalOnlyStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/LocalOnlyStrategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,MAAM,OAAO,iBAAiB;IAC5B,OAAO,CAAC,OAAqB;QAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAA+B,CAAC,CAAA;QAEpE,4BAA4B;QAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAC1D,CAAC;QAED,kDAAkD;QAClD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MergeResult } from '../../types/mergeResult.js';
|
|
2
|
+
import type { MergeContext } from '../MergeContext.js';
|
|
3
|
+
import type { ScenarioStrategy } from './ScenarioStrategy.js';
|
|
4
|
+
export declare class NoneStrategy implements ScenarioStrategy {
|
|
5
|
+
execute(_context: MergeContext): MergeResult;
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoneStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/NoneStrategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAIvD,MAAM,OAAO,YAAY;IACvB,OAAO,CAAC,QAAsB;QAC5B,uDAAuD;QACvD,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MergeResult } from '../../types/mergeResult.js';
|
|
2
|
+
import type { MergeContext } from '../MergeContext.js';
|
|
3
|
+
import type { ScenarioStrategy } from './ScenarioStrategy.js';
|
|
4
|
+
export declare class OtherOnlyStrategy implements ScenarioStrategy {
|
|
5
|
+
execute(context: MergeContext): MergeResult;
|
|
6
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { noConflict } from '../../types/mergeResult.js';
|
|
2
|
+
import { toJsonArray } from '../nodes/nodeUtils.js';
|
|
3
|
+
export class OtherOnlyStrategy {
|
|
4
|
+
execute(context) {
|
|
5
|
+
const content = toJsonArray(context.other);
|
|
6
|
+
// Root level: wrap with key
|
|
7
|
+
if (context.rootKey) {
|
|
8
|
+
return noConflict([{ [context.rootKey.name]: content }]);
|
|
9
|
+
}
|
|
10
|
+
// Nested level: return content for parent to wrap
|
|
11
|
+
return noConflict(content);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=OtherOnlyStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OtherOnlyStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/OtherOnlyStrategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,MAAM,OAAO,iBAAiB;IAC5B,OAAO,CAAC,OAAqB;QAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAA+B,CAAC,CAAA;QAEpE,4BAA4B;QAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAC1D,CAAC;QAED,kDAAkD;QAClD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScenarioStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/ScenarioStrategy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { MergeScenario } from '../../types/mergeScenario.js';
|
|
2
|
+
import { AllPresentStrategy } from './AllPresentStrategy.js';
|
|
3
|
+
import { AncestorAndLocalStrategy } from './AncestorAndLocalStrategy.js';
|
|
4
|
+
import { AncestorAndOtherStrategy } from './AncestorAndOtherStrategy.js';
|
|
5
|
+
import { AncestorOnlyStrategy } from './AncestorOnlyStrategy.js';
|
|
6
|
+
import { LocalAndOtherStrategy } from './LocalAndOtherStrategy.js';
|
|
7
|
+
import { LocalOnlyStrategy } from './LocalOnlyStrategy.js';
|
|
8
|
+
import { NoneStrategy } from './NoneStrategy.js';
|
|
9
|
+
import { OtherOnlyStrategy } from './OtherOnlyStrategy.js';
|
|
10
|
+
const strategies = {
|
|
11
|
+
[MergeScenario.NONE]: new NoneStrategy(),
|
|
12
|
+
[MergeScenario.OTHER_ONLY]: new OtherOnlyStrategy(),
|
|
13
|
+
[MergeScenario.LOCAL_ONLY]: new LocalOnlyStrategy(),
|
|
14
|
+
[MergeScenario.LOCAL_AND_OTHER]: new LocalAndOtherStrategy(),
|
|
15
|
+
[MergeScenario.ANCESTOR_ONLY]: new AncestorOnlyStrategy(),
|
|
16
|
+
[MergeScenario.ANCESTOR_AND_OTHER]: new AncestorAndOtherStrategy(),
|
|
17
|
+
[MergeScenario.ANCESTOR_AND_LOCAL]: new AncestorAndLocalStrategy(),
|
|
18
|
+
[MergeScenario.ALL]: new AllPresentStrategy(),
|
|
19
|
+
};
|
|
20
|
+
export const getScenarioStrategy = (scenario) => {
|
|
21
|
+
return strategies[scenario];
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=ScenarioStrategyFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScenarioStrategyFactory.js","sourceRoot":"","sources":["../../../src/merger/strategies/ScenarioStrategyFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,MAAM,UAAU,GAA4C;IAC1D,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,YAAY,EAAE;IACxC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,iBAAiB,EAAE;IACnD,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,iBAAiB,EAAE;IACnD,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,IAAI,qBAAqB,EAAE;IAC5D,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,IAAI,oBAAoB,EAAE;IACzD,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,IAAI,wBAAwB,EAAE;IAClE,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,IAAI,wBAAwB,EAAE;IAClE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,kBAAkB,EAAE;CAC9C,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,QAAuB,EACL,EAAE;IACpB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAA;AAC7B,CAAC,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { MergeConfig } from '../../types/conflictTypes.js';
|
|
2
|
+
import type { JsonObject } from '../../types/jsonTypes.js';
|
|
3
|
+
import type { MergeResult } from '../../types/mergeResult.js';
|
|
4
|
+
import { MergeScenario } from '../../types/mergeScenario.js';
|
|
5
|
+
export interface TextMergeStrategy {
|
|
6
|
+
handle(config: MergeConfig, objAncestor: JsonObject, objLocal: JsonObject, objOther: JsonObject, ancestor: unknown, local: unknown, other: unknown): MergeResult;
|
|
7
|
+
}
|
|
8
|
+
export declare class OtherOnlyStrategy implements TextMergeStrategy {
|
|
9
|
+
handle(_config: MergeConfig, _objAncestor: JsonObject, _objLocal: JsonObject, objOther: JsonObject): MergeResult;
|
|
10
|
+
}
|
|
11
|
+
export declare class LocalOnlyStrategy implements TextMergeStrategy {
|
|
12
|
+
handle(_config: MergeConfig, _objAncestor: JsonObject, objLocal: JsonObject): MergeResult;
|
|
13
|
+
}
|
|
14
|
+
export declare class LocalAndOtherStrategy implements TextMergeStrategy {
|
|
15
|
+
handle(config: MergeConfig, _objAncestor: JsonObject, objLocal: JsonObject, objOther: JsonObject, _ancestor: unknown, local: unknown, other: unknown): MergeResult;
|
|
16
|
+
}
|
|
17
|
+
export declare class AncestorAndOtherStrategy implements TextMergeStrategy {
|
|
18
|
+
handle(config: MergeConfig, objAncestor: JsonObject, _objLocal: JsonObject, objOther: JsonObject, ancestor: unknown, _local: unknown, other: unknown): MergeResult;
|
|
19
|
+
}
|
|
20
|
+
export declare class AncestorAndLocalStrategy implements TextMergeStrategy {
|
|
21
|
+
handle(config: MergeConfig, objAncestor: JsonObject, objLocal: JsonObject, _objOther: JsonObject, ancestor: unknown, local: unknown): MergeResult;
|
|
22
|
+
}
|
|
23
|
+
export declare class AllPresentStrategy implements TextMergeStrategy {
|
|
24
|
+
handle(config: MergeConfig, objAncestor: JsonObject, objLocal: JsonObject, objOther: JsonObject, ancestor: unknown, local: unknown, other: unknown): MergeResult;
|
|
25
|
+
}
|
|
26
|
+
export declare class AncestorOnlyStrategy implements TextMergeStrategy {
|
|
27
|
+
handle(): MergeResult;
|
|
28
|
+
}
|
|
29
|
+
export declare class NoneStrategy implements TextMergeStrategy {
|
|
30
|
+
handle(): MergeResult;
|
|
31
|
+
}
|
|
32
|
+
export declare const getTextMergeStrategy: (scenario: MergeScenario) => TextMergeStrategy;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { noConflict, withConflict } from '../../types/mergeResult.js';
|
|
2
|
+
import { MergeScenario } from '../../types/mergeScenario.js';
|
|
3
|
+
import { buildConflictMarkers } from '../ConflictMarkerBuilder.js';
|
|
4
|
+
export class OtherOnlyStrategy {
|
|
5
|
+
handle(_config, _objAncestor, _objLocal, objOther) {
|
|
6
|
+
return noConflict([objOther]);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class LocalOnlyStrategy {
|
|
10
|
+
handle(_config, _objAncestor, objLocal) {
|
|
11
|
+
return noConflict([objLocal]);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class LocalAndOtherStrategy {
|
|
15
|
+
handle(config, _objAncestor, objLocal, objOther, _ancestor, local, other) {
|
|
16
|
+
// If both sides added the same value, no conflict
|
|
17
|
+
if (local === other) {
|
|
18
|
+
return noConflict([objLocal]);
|
|
19
|
+
}
|
|
20
|
+
return withConflict(buildConflictMarkers(config, objLocal, {}, objOther));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class AncestorAndOtherStrategy {
|
|
24
|
+
handle(config, objAncestor, _objLocal, objOther, ancestor, _local, other) {
|
|
25
|
+
if (ancestor !== other) {
|
|
26
|
+
return withConflict(buildConflictMarkers(config, {}, objAncestor, objOther));
|
|
27
|
+
}
|
|
28
|
+
return noConflict([]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class AncestorAndLocalStrategy {
|
|
32
|
+
handle(config, objAncestor, objLocal, _objOther, ancestor, local) {
|
|
33
|
+
if (ancestor !== local) {
|
|
34
|
+
return withConflict(buildConflictMarkers(config, objLocal, objAncestor, {}));
|
|
35
|
+
}
|
|
36
|
+
return noConflict([]);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class AllPresentStrategy {
|
|
40
|
+
handle(config, objAncestor, objLocal, objOther, ancestor, local, other) {
|
|
41
|
+
// No change in local - take other's value
|
|
42
|
+
if (ancestor === local) {
|
|
43
|
+
return noConflict([objOther]);
|
|
44
|
+
}
|
|
45
|
+
// No change in other - take local's value
|
|
46
|
+
if (ancestor === other) {
|
|
47
|
+
return noConflict([objLocal]);
|
|
48
|
+
}
|
|
49
|
+
// Both changed to same value - no conflict
|
|
50
|
+
if (local === other) {
|
|
51
|
+
return noConflict([objLocal]);
|
|
52
|
+
}
|
|
53
|
+
// Real conflict - build markers
|
|
54
|
+
return withConflict(buildConflictMarkers(config, objLocal, objAncestor, objOther));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class AncestorOnlyStrategy {
|
|
58
|
+
handle() {
|
|
59
|
+
return noConflict([]);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class NoneStrategy {
|
|
63
|
+
handle() {
|
|
64
|
+
return noConflict([]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const strategies = {
|
|
68
|
+
[MergeScenario.NONE]: new NoneStrategy(),
|
|
69
|
+
[MergeScenario.OTHER_ONLY]: new OtherOnlyStrategy(),
|
|
70
|
+
[MergeScenario.LOCAL_ONLY]: new LocalOnlyStrategy(),
|
|
71
|
+
[MergeScenario.LOCAL_AND_OTHER]: new LocalAndOtherStrategy(),
|
|
72
|
+
[MergeScenario.ANCESTOR_AND_OTHER]: new AncestorAndOtherStrategy(),
|
|
73
|
+
[MergeScenario.ANCESTOR_AND_LOCAL]: new AncestorAndLocalStrategy(),
|
|
74
|
+
[MergeScenario.ALL]: new AllPresentStrategy(),
|
|
75
|
+
[MergeScenario.ANCESTOR_ONLY]: new AncestorOnlyStrategy(),
|
|
76
|
+
};
|
|
77
|
+
export const getTextMergeStrategy = (scenario) => {
|
|
78
|
+
return strategies[scenario];
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=TextMergeStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextMergeStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/TextMergeStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
+
import { NAMESPACE_PREFIX, NAMESPACE_ROOT } from '../constant/parserConstant.js';
|
|
2
3
|
import { log } from '../utils/LoggingDecorator.js';
|
|
3
|
-
const NAMESPACE_PREFIX = '@_';
|
|
4
|
-
const NAMESPACE_ROOT = ':@';
|
|
5
4
|
export class NamespaceHandler {
|
|
6
5
|
processNamespaces(ancestor, local, other) {
|
|
7
6
|
const namespaces = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NamespaceHandler.js","sourceRoot":"","sources":["../../src/service/NamespaceHandler.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"NamespaceHandler.js","sourceRoot":"","sources":["../../src/service/NamespaceHandler.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAEhF,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAElD,MAAM,OAAO,gBAAgB;IAEpB,iBAAiB,CACtB,QAAgC,EAChC,KAA6B,EAC7B,KAA6B;QAE7B,MAAM,UAAU,GAAe,EAAE,CAAA;QAEjC,2DAA2D;QAC3D,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,iEAAiE;gBACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAe,CAAA;gBACvC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7C,IAAI,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;wBAC1C,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;wBACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAA,CAAC,8CAA8C;oBAC1E,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;IAGM,qBAAqB,CAAC,GAAc,EAAE,UAAsB;QACjE,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,iCAAiC;YACjC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAe,CAAA;YAEvC,yDAAyD;YACzD,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,CAAA;YAE/B,0DAA0D;YAC1D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,CAAC;gBAAC,UAAU,CAAC,cAAc,CAAgB,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;YACpE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAvCQ;IADN,GAAG;yDAuBH;AAGM;IADN,GAAG;6DAcH"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { JsonArray } from './jsonTypes.js';
|
|
2
|
+
export interface MergeResult {
|
|
3
|
+
output: JsonArray;
|
|
4
|
+
hasConflict: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const combineResults: (results: MergeResult[]) => MergeResult;
|
|
7
|
+
export declare const noConflict: (output: JsonArray) => MergeResult;
|
|
8
|
+
export declare const withConflict: (output: JsonArray) => MergeResult;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Pre-allocated constant for the common empty no-conflict case
|
|
2
|
+
// Used by NoneStrategy, AncestorOnlyStrategy, and equality-based early returns
|
|
3
|
+
const EMPTY_ARRAY = [];
|
|
4
|
+
const EMPTY_NO_CONFLICT = {
|
|
5
|
+
output: EMPTY_ARRAY,
|
|
6
|
+
hasConflict: false,
|
|
7
|
+
};
|
|
8
|
+
export const combineResults = (results) => {
|
|
9
|
+
// Fast path: no results
|
|
10
|
+
if (results.length === 0) {
|
|
11
|
+
return EMPTY_NO_CONFLICT;
|
|
12
|
+
}
|
|
13
|
+
// Fast path: single result
|
|
14
|
+
if (results.length === 1) {
|
|
15
|
+
return results[0];
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
output: results.flatMap(r => r.output),
|
|
19
|
+
hasConflict: results.some(r => r.hasConflict),
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export const noConflict = (output) => {
|
|
23
|
+
// Reuse constant for empty arrays
|
|
24
|
+
if (output.length === 0) {
|
|
25
|
+
return EMPTY_NO_CONFLICT;
|
|
26
|
+
}
|
|
27
|
+
return { output, hasConflict: false };
|
|
28
|
+
};
|
|
29
|
+
export const withConflict = (output) => ({
|
|
30
|
+
output,
|
|
31
|
+
hasConflict: true,
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=mergeResult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeResult.js","sourceRoot":"","sources":["../../src/types/mergeResult.ts"],"names":[],"mappings":"AAOA,+DAA+D;AAC/D,+EAA+E;AAC/E,MAAM,WAAW,GAAc,EAAE,CAAA;AACjC,MAAM,iBAAiB,GAAgB;IACrC,MAAM,EAAE,WAAW;IACnB,WAAW,EAAE,KAAK;CACnB,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAe,EAAE;IACpE,wBAAwB;IACxB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,iBAAiB,CAAA;IAC1B,CAAC;IACD,2BAA2B;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACtC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;KAC9C,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAiB,EAAe,EAAE;IAC3D,kCAAkC;IAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,iBAAiB,CAAA;IAC1B,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAiB,EAAe,EAAE,CAAC,CAAC;IAC/D,MAAM;IACN,WAAW,EAAE,IAAI;CAClB,CAAC,CAAA"}
|