sf-git-merge-driver 1.4.0-dev-159.21317420119-1 → 1.4.0-dev-159.21320251314-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 +3 -3
- package/lib/merger/ConflictMarkerFormatter.js +0 -4
- package/lib/merger/ConflictMarkerFormatter.js.map +1 -1
- package/lib/merger/MergeOrchestrator.js +0 -1
- package/lib/merger/MergeOrchestrator.js.map +1 -1
- package/lib/merger/XmlMerger.js +0 -2
- package/lib/merger/XmlMerger.js.map +1 -1
- package/lib/merger/nodes/TextArrayMergeNode.js +1 -14
- package/lib/merger/nodes/TextArrayMergeNode.js.map +1 -1
- package/lib/merger/nodes/TextMergeNode.js +1 -6
- package/lib/merger/nodes/TextMergeNode.js.map +1 -1
- package/lib/merger/nodes/nodeUtils.d.ts +3 -0
- package/lib/merger/nodes/nodeUtils.js +12 -1
- package/lib/merger/nodes/nodeUtils.js.map +1 -1
- package/lib/merger/strategies/AllPresentStrategy.js +2 -14
- package/lib/merger/strategies/AllPresentStrategy.js.map +1 -1
- package/lib/merger/strategies/AncestorAndLocalStrategy.js +2 -21
- package/lib/merger/strategies/AncestorAndLocalStrategy.js.map +1 -1
- package/lib/merger/strategies/AncestorAndOtherStrategy.js +2 -21
- package/lib/merger/strategies/AncestorAndOtherStrategy.js.map +1 -1
- package/lib/merger/strategies/AncestorOnlyStrategy.js +0 -5
- package/lib/merger/strategies/AncestorOnlyStrategy.js.map +1 -1
- package/lib/merger/strategies/LocalAndOtherStrategy.js +2 -14
- package/lib/merger/strategies/LocalAndOtherStrategy.js.map +1 -1
- package/lib/merger/strategies/LocalOnlyStrategy.js +0 -2
- package/lib/merger/strategies/LocalOnlyStrategy.js.map +1 -1
- package/lib/merger/strategies/NoneStrategy.js +0 -1
- package/lib/merger/strategies/NoneStrategy.js.map +1 -1
- package/lib/merger/strategies/OtherOnlyStrategy.js +0 -2
- package/lib/merger/strategies/OtherOnlyStrategy.js.map +1 -1
- package/lib/merger/strategies/TextMergeStrategy.js +0 -5
- package/lib/merger/strategies/TextMergeStrategy.js.map +1 -1
- package/lib/types/mergeResult.js +0 -5
- package/lib/types/mergeResult.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/oclif.manifest.json +1 -1
- package/package.json +14 -1
package/README.md
CHANGED
|
@@ -279,7 +279,7 @@ EXAMPLES
|
|
|
279
279
|
$ sf git merge driver install
|
|
280
280
|
```
|
|
281
281
|
|
|
282
|
-
_See code: [src/commands/git/merge/driver/install.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0-dev-159.
|
|
282
|
+
_See code: [src/commands/git/merge/driver/install.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0-dev-159.21320251314-1/src/commands/git/merge/driver/install.ts)_
|
|
283
283
|
|
|
284
284
|
## `sf git merge driver run`
|
|
285
285
|
|
|
@@ -323,7 +323,7 @@ EXAMPLES
|
|
|
323
323
|
- output-file is the path to the file where the merged content will be written
|
|
324
324
|
```
|
|
325
325
|
|
|
326
|
-
_See code: [src/commands/git/merge/driver/run.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0-dev-159.
|
|
326
|
+
_See code: [src/commands/git/merge/driver/run.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0-dev-159.21320251314-1/src/commands/git/merge/driver/run.ts)_
|
|
327
327
|
|
|
328
328
|
## `sf git merge driver uninstall`
|
|
329
329
|
|
|
@@ -353,7 +353,7 @@ EXAMPLES
|
|
|
353
353
|
$ sf git merge driver uninstall
|
|
354
354
|
```
|
|
355
355
|
|
|
356
|
-
_See code: [src/commands/git/merge/driver/uninstall.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0-dev-159.
|
|
356
|
+
_See code: [src/commands/git/merge/driver/uninstall.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0-dev-159.21320251314-1/src/commands/git/merge/driver/uninstall.ts)_
|
|
357
357
|
<!-- commandsstop -->
|
|
358
358
|
## Changelog
|
|
359
359
|
|
|
@@ -9,16 +9,12 @@ export class ConflictMarkerFormatter {
|
|
|
9
9
|
indentRegex;
|
|
10
10
|
constructor(config) {
|
|
11
11
|
const size = config.conflictMarkerSize;
|
|
12
|
-
// Build marker strings from config size
|
|
13
12
|
this.localMarker = LOCAL_CONFLICT_MARKER.repeat(size);
|
|
14
13
|
this.ancestorMarker = ANCESTOR_CONFLICT_MARKER.repeat(size);
|
|
15
14
|
this.separator = SEPARATOR.repeat(size);
|
|
16
15
|
this.otherMarker = OTHER_CONFLICT_MARKER.repeat(size);
|
|
17
|
-
// Build entity-escaped versions for XML processing
|
|
18
16
|
this.localEntity = '<'.repeat(size);
|
|
19
17
|
this.otherEntity = '>'.repeat(size);
|
|
20
|
-
// Build regex pattern for indent correction
|
|
21
|
-
// Matches any of the conflict markers at start of content
|
|
22
18
|
const escapedMarkers = [
|
|
23
19
|
this.escapeRegex(this.localMarker),
|
|
24
20
|
this.escapeRegex(this.ancestorMarker),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConflictMarkerFormatter.js","sourceRoot":"","sources":["../../src/merger/ConflictMarkerFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,SAAS,GACV,MAAM,iCAAiC,CAAA;AAGxC,MAAM,OAAO,uBAAuB;IACjB,WAAW,CAAQ;IACnB,cAAc,CAAQ;IACtB,SAAS,CAAQ;IACjB,WAAW,CAAQ;IACnB,WAAW,CAAQ;IACnB,WAAW,CAAQ;IACnB,WAAW,CAAQ;IAEpC,YAAY,MAAmB;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAA;QAEtC,
|
|
1
|
+
{"version":3,"file":"ConflictMarkerFormatter.js","sourceRoot":"","sources":["../../src/merger/ConflictMarkerFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,SAAS,GACV,MAAM,iCAAiC,CAAA;AAGxC,MAAM,OAAO,uBAAuB;IACjB,WAAW,CAAQ;IACnB,cAAc,CAAQ;IACtB,SAAS,CAAQ;IACjB,WAAW,CAAQ;IACnB,WAAW,CAAQ;IACnB,WAAW,CAAQ;IACnB,WAAW,CAAQ;IAEpC,YAAY,MAAmB;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAA;QAEtC,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACrD,IAAI,CAAC,cAAc,GAAG,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC3D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAErD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEtC,MAAM,cAAc,GAAG;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;SACnC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,IAAI,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,WAAW,cAAc,GAAG,EAAE,GAAG,CAAC,CAAA;IAClE,CAAC;IAED,qBAAqB,CAAC,GAAW;QAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,qBAAqB,CAAC,GAAW;QAC/B,OAAO,GAAG;aACP,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC;aAClC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;aAC9C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IACnD,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IACnD,CAAC;CACF"}
|
|
@@ -14,7 +14,6 @@ export class MergeOrchestrator {
|
|
|
14
14
|
}
|
|
15
15
|
merge(ancestor, local, other, attribute, rootKey) {
|
|
16
16
|
const scenario = getScenario(ancestor, local, other);
|
|
17
|
-
// Early termination: if all three are equal, skip merge
|
|
18
17
|
if (scenario === MergeScenario.ALL) {
|
|
19
18
|
if (deepEqual(ancestor, local) && deepEqual(local, other)) {
|
|
20
19
|
return this.buildEarlyResult(local, rootKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MergeOrchestrator.js","sourceRoot":"","sources":["../../src/merger/MergeOrchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIvC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EACL,kBAAkB,GAEnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAE7E,MAAM,OAAO,iBAAiB;IAET;IACA;IAFnB,YACmB,MAAmB,EACnB,cAAgC,kBAAkB;QADlD,WAAM,GAAN,MAAM,CAAa;QACnB,gBAAW,GAAX,WAAW,CAAuC;IAClE,CAAC;IAEJ,KAAK,CACH,QAAmB,EACnB,KAAgB,EAChB,KAAgB,EAChB,SAAkB,EAClB,OAAqB;QAErB,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAEpD,
|
|
1
|
+
{"version":3,"file":"MergeOrchestrator.js","sourceRoot":"","sources":["../../src/merger/MergeOrchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIvC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EACL,kBAAkB,GAEnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAE7E,MAAM,OAAO,iBAAiB;IAET;IACA;IAFnB,YACmB,MAAmB,EACnB,cAAgC,kBAAkB;QADlD,WAAM,GAAN,MAAM,CAAa;QACnB,gBAAW,GAAX,WAAW,CAAuC;IAClE,CAAC;IAEJ,KAAK,CACH,QAAmB,EACnB,KAAgB,EAChB,KAAgB,EAChB,SAAkB,EAClB,OAAqB;QAErB,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAEpD,IAAI,QAAQ,KAAK,aAAa,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC1D,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAE9C,MAAM,OAAO,GAAiB;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ;YACR,KAAK;YACL,KAAK;YACL,SAAS;YACT,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO;SACR,CAAA;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAEO,gBAAgB,CACtB,KAAgB,EAChB,OAAqB;QAErB,MAAM,OAAO,GAAG,WAAW,CAAC,KAA+B,CAAC,CAAA;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAClD,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED,WAAW,CACT,QAAgC,EAChC,KAA6B,EAC7B,KAA6B;QAE7B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC3C,CAAC;CACF"}
|
package/lib/merger/XmlMerger.js
CHANGED
|
@@ -36,10 +36,8 @@ export class XmlMerger {
|
|
|
36
36
|
const ancestorObj = parser.parse(ancestorContent);
|
|
37
37
|
const ourObj = parser.parse(ourContent);
|
|
38
38
|
const theirObj = parser.parse(theirContent);
|
|
39
|
-
// Perform deep merge of XML objects
|
|
40
39
|
const jsonMerger = new JsonMerger(this.config);
|
|
41
40
|
const mergedResult = jsonMerger.mergeThreeWay(ancestorObj, ourObj, theirObj);
|
|
42
|
-
// Convert back to XML and format
|
|
43
41
|
const builder = new XMLBuilder(builderOptions);
|
|
44
42
|
const mergedXml = builder.build(mergedResult.output);
|
|
45
43
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XmlMerger.js","sourceRoot":"","sources":["../../src/merger/XmlMerger.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,QAAQ,EACR,UAAU,GACX,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,WAAW,GAAG;IAClB,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,qBAAqB;IACtC,gBAAgB,EAAE,KAAK;IACvB,eAAe,EAAE,KAAK;CACvB,CAAA;AAED,MAAM,aAAa,GAAG;IACpB,GAAG,WAAW;IACd,iBAAiB,EAAE,IAAI;IACvB,kBAAkB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;IACvD,mBAAmB,EAAE,KAAK;IAC1B,aAAa,EAAE,KAAK;CACrB,CAAA;AAED,MAAM,cAAc,GAAG;IACrB,GAAG,WAAW;IACd,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,IAAI;CACpB,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE,CAC9C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AAE9E,MAAM,OAAO,SAAS;IAGS;IAFZ,SAAS,CAAyB;IAEnD,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAA;IACtD,CAAC;IAGD,aAAa,CACX,eAAuB,EACvB,UAAkB,EAClB,YAAoB;QAEpB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAA;QAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAE3C,
|
|
1
|
+
{"version":3,"file":"XmlMerger.js","sourceRoot":"","sources":["../../src/merger/XmlMerger.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,QAAQ,EACR,UAAU,GACX,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,WAAW,GAAG;IAClB,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,qBAAqB;IACtC,gBAAgB,EAAE,KAAK;IACvB,eAAe,EAAE,KAAK;CACvB,CAAA;AAED,MAAM,aAAa,GAAG;IACpB,GAAG,WAAW;IACd,iBAAiB,EAAE,IAAI;IACvB,kBAAkB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;IACvD,mBAAmB,EAAE,KAAK;IAC1B,aAAa,EAAE,KAAK;CACrB,CAAA;AAED,MAAM,cAAc,GAAG;IACrB,GAAG,WAAW;IACd,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,IAAI;CACpB,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE,CAC9C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AAE9E,MAAM,OAAO,SAAS;IAGS;IAFZ,SAAS,CAAyB;IAEnD,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAA;IACtD,CAAC;IAGD,aAAa,CACX,eAAuB,EACvB,UAAkB,EAClB,YAAoB;QAEpB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAA;QAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAE3C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAE5E,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAA;QAC9C,MAAM,SAAS,GAAW,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAC5D,OAAO;YACL,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/D,WAAW,EAAE,YAAY,CAAC,WAAW;SACtC,CAAA;IACH,CAAC;IAEO,eAAe,CAAC,GAAW;QACjC,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;QACrD,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;QACrD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AA7BC;IADC,GAAG;8CAqBH"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import { isNil } from 'lodash-es';
|
|
2
|
-
import { TEXT_TAG } from '../../constant/parserConstant.js';
|
|
3
1
|
import { noConflict } from '../../types/mergeResult.js';
|
|
4
|
-
|
|
5
|
-
return isNil(value) ? {} : { [attrib]: [{ [TEXT_TAG]: value }] };
|
|
6
|
-
};
|
|
7
|
-
// Comparator for sorting - handles null/undefined by converting to string
|
|
2
|
+
import { generateObj } from './nodeUtils.js';
|
|
8
3
|
const compareItems = (a, b) => {
|
|
9
4
|
const strA = String(a);
|
|
10
5
|
const strB = String(b);
|
|
@@ -28,36 +23,28 @@ export class TextArrayMergeNode {
|
|
|
28
23
|
merge(_config) {
|
|
29
24
|
const localSet = new Set(this.local);
|
|
30
25
|
const otherSet = new Set(this.other);
|
|
31
|
-
// Single pass: collect items that should be in result
|
|
32
|
-
// An item is included if:
|
|
33
|
-
// - It exists in local or other (union)
|
|
34
|
-
// - AND it wasn't removed (existed in ancestor but not in local/other)
|
|
35
26
|
const resultItems = [];
|
|
36
27
|
const seen = new Set();
|
|
37
28
|
for (const item of this.ancestor) {
|
|
38
29
|
if (seen.has(item))
|
|
39
30
|
continue;
|
|
40
31
|
seen.add(item);
|
|
41
|
-
// Keep if present in both local and other (not removed by either)
|
|
42
32
|
if (localSet.has(item) && otherSet.has(item)) {
|
|
43
33
|
resultItems.push(item);
|
|
44
34
|
}
|
|
45
35
|
}
|
|
46
|
-
// Items from local not yet seen are new additions (not in ancestor)
|
|
47
36
|
for (const item of this.local) {
|
|
48
37
|
if (seen.has(item))
|
|
49
38
|
continue;
|
|
50
39
|
seen.add(item);
|
|
51
40
|
resultItems.push(item);
|
|
52
41
|
}
|
|
53
|
-
// Items from other not yet seen are new additions (not in ancestor)
|
|
54
42
|
for (const item of this.other) {
|
|
55
43
|
if (seen.has(item))
|
|
56
44
|
continue;
|
|
57
45
|
seen.add(item);
|
|
58
46
|
resultItems.push(item);
|
|
59
47
|
}
|
|
60
|
-
// Sort and transform in single pass using reduce
|
|
61
48
|
resultItems.sort(compareItems);
|
|
62
49
|
const merged = resultItems.map(item => generateObj(item, this.attribute));
|
|
63
50
|
return noConflict(merged);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextArrayMergeNode.js","sourceRoot":"","sources":["../../../src/merger/nodes/TextArrayMergeNode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TextArrayMergeNode.js","sourceRoot":"","sources":["../../../src/merger/nodes/TextArrayMergeNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,MAAM,YAAY,GAAG,CAAC,CAAY,EAAE,CAAY,EAAU,EAAE;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtB,IAAI,IAAI,GAAG,IAAI;QAAE,OAAO,CAAC,CAAC,CAAA;IAC1B,IAAI,IAAI,GAAG,IAAI;QAAE,OAAO,CAAC,CAAA;IACzB,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAED,MAAM,OAAO,kBAAkB;IAEV;IACA;IACA;IACA;IAJnB,YACmB,QAAmB,EACnB,KAAgB,EAChB,KAAgB,EAChB,SAAiB;QAHjB,aAAQ,GAAR,QAAQ,CAAW;QACnB,UAAK,GAAL,KAAK,CAAW;QAChB,UAAK,GAAL,KAAK,CAAW;QAChB,cAAS,GAAT,SAAS,CAAQ;IACjC,CAAC;IAEJ,KAAK,CAAC,OAAoB;QACxB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpC,MAAM,WAAW,GAAgB,EAAE,CAAA;QACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAa,CAAA;QAEjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAQ;YAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACd,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAQ;YAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACd,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAQ;YAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACd,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QAEzE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;CACF"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import { isNil } from 'lodash-es';
|
|
2
|
-
import { TEXT_TAG } from '../../constant/parserConstant.js';
|
|
3
1
|
import { noConflict } from '../../types/mergeResult.js';
|
|
4
2
|
import { MergeScenario } from '../../types/mergeScenario.js';
|
|
5
3
|
import { getScenario } from '../MergeScenarioFactory.js';
|
|
6
4
|
import { getTextMergeStrategy } from '../strategies/TextMergeStrategy.js';
|
|
7
|
-
|
|
8
|
-
return isNil(value) ? {} : { [attrib]: [{ [TEXT_TAG]: value }] };
|
|
9
|
-
};
|
|
5
|
+
import { generateObj } from './nodeUtils.js';
|
|
10
6
|
export class TextMergeNode {
|
|
11
7
|
ancestor;
|
|
12
8
|
local;
|
|
@@ -23,7 +19,6 @@ export class TextMergeNode {
|
|
|
23
19
|
const objLocal = generateObj(this.local, this.attribute);
|
|
24
20
|
const objOther = generateObj(this.other, this.attribute);
|
|
25
21
|
const scenario = getScenario(objAncestor, objLocal, objOther);
|
|
26
|
-
// Early return for identical values - use strict equality for primitives
|
|
27
22
|
if (this.local === this.other &&
|
|
28
23
|
(scenario === MergeScenario.LOCAL_AND_OTHER ||
|
|
29
24
|
scenario === MergeScenario.ALL)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextMergeNode.js","sourceRoot":"","sources":["../../../src/merger/nodes/TextMergeNode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TextMergeNode.js","sourceRoot":"","sources":["../../../src/merger/nodes/TextMergeNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,MAAM,OAAO,aAAa;IAEL;IACA;IACA;IACA;IAJnB,YACmB,QAA0B,EAC1B,KAAuB,EACvB,KAAuB,EACvB,SAAiB;QAHjB,aAAQ,GAAR,QAAQ,CAAkB;QAC1B,UAAK,GAAL,KAAK,CAAkB;QACvB,UAAK,GAAL,KAAK,CAAkB;QACvB,cAAS,GAAT,SAAS,CAAQ;IACjC,CAAC;IAEJ,KAAK,CAAC,MAAmB;QACvB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QACxD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAExD,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAE7D,IACE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YACzB,CAAC,QAAQ,KAAK,aAAa,CAAC,eAAe;gBACzC,QAAQ,KAAK,aAAa,CAAC,GAAG,CAAC,EACjC,CAAC;YACD,OAAO,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC/B,CAAC;QAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;QAC/C,OAAO,QAAQ,CAAC,MAAM,CACpB,MAAM,EACN,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,CACX,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { JsonArray, JsonObject, JsonValue } from '../../types/jsonTypes.js';
|
|
2
|
+
import type { MergeResult } from '../../types/mergeResult.js';
|
|
2
3
|
export declare const ensureArray: (value: JsonValue) => JsonArray;
|
|
3
4
|
export declare const getUniqueSortedProps: (...objects: (JsonObject | JsonArray)[]) => string[];
|
|
4
5
|
export declare const generateObj: (value: JsonValue | null, attrib: string) => JsonObject;
|
|
6
|
+
export declare const extractContent: (arr: JsonArray) => JsonObject | JsonArray;
|
|
7
|
+
export declare const wrapWithRootKey: (result: MergeResult, rootKeyName: string) => MergeResult;
|
|
5
8
|
export declare const toJsonArray: (inputObj: JsonObject | JsonArray) => JsonArray;
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
import { castArray, flatMap, flow, isNil, isObject, reject, sortBy, uniq, } from 'lodash-es';
|
|
1
|
+
import { castArray, flatMap, flow, isEmpty, isNil, isObject, reject, sortBy, uniq, } from 'lodash-es';
|
|
2
2
|
import { TEXT_TAG } from '../../constant/parserConstant.js';
|
|
3
|
+
import { noConflict } from '../../types/mergeResult.js';
|
|
3
4
|
export const ensureArray = (value) => isNil(value) ? [] : castArray(value);
|
|
4
5
|
const extractSortedKeys = flow((objects) => reject(objects, isNil), objects => flatMap(objects, Object.keys), uniq, sortBy);
|
|
5
6
|
export const getUniqueSortedProps = (...objects) => extractSortedKeys(objects);
|
|
6
7
|
export const generateObj = (value, attrib) => (isNil(value) ? {} : { [attrib]: [{ [TEXT_TAG]: value }] });
|
|
8
|
+
export const extractContent = (arr) => (arr.length === 1 ? arr[0] : arr);
|
|
9
|
+
export const wrapWithRootKey = (result, rootKeyName) => {
|
|
10
|
+
if (!isEmpty(result.output)) {
|
|
11
|
+
return {
|
|
12
|
+
output: [{ [rootKeyName]: result.output }],
|
|
13
|
+
hasConflict: result.hasConflict,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return noConflict([{ [rootKeyName]: [] }]);
|
|
17
|
+
};
|
|
7
18
|
export const toJsonArray = (inputObj) => flatMap(getUniqueSortedProps(inputObj), attribute => {
|
|
8
19
|
const inputObjOfAttr = inputObj[attribute];
|
|
9
20
|
if (isObject(inputObjOfAttr)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeUtils.js","sourceRoot":"","sources":["../../../src/merger/nodes/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,IAAI,GACL,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAG3D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAgB,EAAa,EAAE,CACzD,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,SAAS,CAAC,KAAK,CAAe,CAAA;AAErD,MAAM,iBAAiB,GAAG,IAAI,CAC5B,CAAC,OAAmC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAC/D,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EACxC,IAAI,EACJ,MAAM,CACP,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,GAAG,OAAmC,EAC5B,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAuB,EACvB,MAAc,EACF,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;AAE5E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAgC,EAAa,EAAE,CACzE,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE;IAClD,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;IAE1C,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,CAAA;QAC/C,OAAO,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE;YACtD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;YAC9B,OAAO,QAAQ,CAAC,KAAK,CAAC;gBACpB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,KAA+B,CAAC,EAAE;gBAC/D,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"nodeUtils.js","sourceRoot":"","sources":["../../../src/merger/nodes/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,IAAI,GACL,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAG3D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAgB,EAAa,EAAE,CACzD,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,SAAS,CAAC,KAAK,CAAe,CAAA;AAErD,MAAM,iBAAiB,GAAG,IAAI,CAC5B,CAAC,OAAmC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAC/D,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EACxC,IAAI,EACJ,MAAM,CACP,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,GAAG,OAAmC,EAC5B,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAuB,EACvB,MAAc,EACF,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;AAE5E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAc,EAA0B,EAAE,CACvE,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAA2B,CAAA;AAE7D,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAmB,EACnB,WAAmB,EACN,EAAE;IACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,MAAM,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YAC1C,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAA;IACH,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAgC,EAAa,EAAE,CACzE,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE;IAClD,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;IAE1C,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,CAAA;QAC/C,OAAO,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE;YACtD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;YAC9B,OAAO,QAAQ,CAAC,KAAK,CAAC;gBACpB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,KAA+B,CAAC,EAAE;gBAC/D,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA"}
|
|
@@ -1,22 +1,10 @@
|
|
|
1
|
-
import { isEmpty } from 'lodash-es';
|
|
2
1
|
import { combineResults } from '../../types/mergeResult.js';
|
|
3
|
-
import { getUniqueSortedProps } from '../nodes/nodeUtils.js';
|
|
2
|
+
import { getUniqueSortedProps, wrapWithRootKey } from '../nodes/nodeUtils.js';
|
|
4
3
|
export class AllPresentStrategy {
|
|
5
4
|
execute(context) {
|
|
6
5
|
const result = this.mergeChildren(context);
|
|
7
|
-
// Root level: wrap result with key
|
|
8
6
|
if (context.rootKey) {
|
|
9
|
-
|
|
10
|
-
return {
|
|
11
|
-
output: [{ [context.rootKey.name]: result.output }],
|
|
12
|
-
hasConflict: result.hasConflict,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
// Empty result but key exists - preserve empty key
|
|
16
|
-
return {
|
|
17
|
-
output: [{ [context.rootKey.name]: [] }],
|
|
18
|
-
hasConflict: result.hasConflict,
|
|
19
|
-
};
|
|
7
|
+
return wrapWithRootKey(result, context.rootKey.name);
|
|
20
8
|
}
|
|
21
9
|
return result;
|
|
22
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AllPresentStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AllPresentStrategy.ts"],"names":[],"mappings":"
|
|
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,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAG7E,MAAM,OAAO,kBAAkB;IAC7B,OAAO,CAAC,OAAqB;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACtD,CAAC;QACD,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"}
|
|
@@ -1,23 +1,16 @@
|
|
|
1
1
|
import { deepEqual } from 'fast-equals';
|
|
2
|
-
import { isEmpty } from 'lodash-es';
|
|
3
2
|
import { noConflict, withConflict } from '../../types/mergeResult.js';
|
|
4
3
|
import { buildConflictMarkers } from '../ConflictMarkerBuilder.js';
|
|
5
4
|
import { MergeOrchestrator } from '../MergeOrchestrator.js';
|
|
6
|
-
import { toJsonArray } from '../nodes/nodeUtils.js';
|
|
7
|
-
const extractContent = (arr) => {
|
|
8
|
-
return (arr.length === 1 ? arr[0] : arr);
|
|
9
|
-
};
|
|
5
|
+
import { extractContent, toJsonArray, wrapWithRootKey, } from '../nodes/nodeUtils.js';
|
|
10
6
|
export class AncestorAndLocalStrategy {
|
|
11
7
|
execute(context) {
|
|
12
8
|
const localUnchanged = deepEqual(context.ancestor, context.local);
|
|
13
|
-
// Root level handling
|
|
14
9
|
if (context.rootKey) {
|
|
15
10
|
const { name, existsInOther } = context.rootKey;
|
|
16
|
-
// Other key missing and local unchanged = other deletion wins
|
|
17
11
|
if (!existsInOther && localUnchanged) {
|
|
18
12
|
return noConflict([]);
|
|
19
13
|
}
|
|
20
|
-
// Other key missing and local changed = conflict at root level
|
|
21
14
|
if (!existsInOther && !localUnchanged) {
|
|
22
15
|
const localObj = {
|
|
23
16
|
[name]: toJsonArray(context.local),
|
|
@@ -27,26 +20,14 @@ export class AncestorAndLocalStrategy {
|
|
|
27
20
|
};
|
|
28
21
|
return withConflict(buildConflictMarkers(context.config, localObj, ancestorObj, {}));
|
|
29
22
|
}
|
|
30
|
-
|
|
31
|
-
const result = this.executeNested(context);
|
|
32
|
-
if (!isEmpty(result.output)) {
|
|
33
|
-
return {
|
|
34
|
-
output: [{ [name]: result.output }],
|
|
35
|
-
hasConflict: result.hasConflict,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
// Empty result but key exists - preserve empty key
|
|
39
|
-
return noConflict([{ [name]: [] }]);
|
|
23
|
+
return wrapWithRootKey(this.executeNested(context), name);
|
|
40
24
|
}
|
|
41
|
-
// Nested level: local unchanged means return empty (other deleted)
|
|
42
25
|
if (localUnchanged) {
|
|
43
26
|
return noConflict([]);
|
|
44
27
|
}
|
|
45
|
-
// Nested level with attribute (keyed array element)
|
|
46
28
|
if (context.attribute) {
|
|
47
29
|
return this.executeWithAttribute(context);
|
|
48
30
|
}
|
|
49
|
-
// Nested level conflict
|
|
50
31
|
return withConflict(buildConflictMarkers(context.config, extractContent(toJsonArray(context.local)), extractContent(toJsonArray(context.ancestor)), {}));
|
|
51
32
|
}
|
|
52
33
|
executeNested(context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AncestorAndLocalStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorAndLocalStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"AncestorAndLocalStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorAndLocalStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,16 @@
|
|
|
1
1
|
import { deepEqual } from 'fast-equals';
|
|
2
|
-
import { isEmpty } from 'lodash-es';
|
|
3
2
|
import { noConflict, withConflict } from '../../types/mergeResult.js';
|
|
4
3
|
import { buildConflictMarkers } from '../ConflictMarkerBuilder.js';
|
|
5
4
|
import { MergeOrchestrator } from '../MergeOrchestrator.js';
|
|
6
|
-
import { toJsonArray } from '../nodes/nodeUtils.js';
|
|
7
|
-
const extractContent = (arr) => {
|
|
8
|
-
return (arr.length === 1 ? arr[0] : arr);
|
|
9
|
-
};
|
|
5
|
+
import { extractContent, toJsonArray, wrapWithRootKey, } from '../nodes/nodeUtils.js';
|
|
10
6
|
export class AncestorAndOtherStrategy {
|
|
11
7
|
execute(context) {
|
|
12
8
|
const otherUnchanged = deepEqual(context.ancestor, context.other);
|
|
13
|
-
// Root level handling
|
|
14
9
|
if (context.rootKey) {
|
|
15
10
|
const { name, existsInLocal } = context.rootKey;
|
|
16
|
-
// Local key missing and other unchanged = local deletion wins
|
|
17
11
|
if (!existsInLocal && otherUnchanged) {
|
|
18
12
|
return noConflict([]);
|
|
19
13
|
}
|
|
20
|
-
// Local key missing and other changed = conflict at root level
|
|
21
14
|
if (!existsInLocal && !otherUnchanged) {
|
|
22
15
|
const ancestorObj = {
|
|
23
16
|
[name]: toJsonArray(context.ancestor),
|
|
@@ -27,26 +20,14 @@ export class AncestorAndOtherStrategy {
|
|
|
27
20
|
};
|
|
28
21
|
return withConflict(buildConflictMarkers(context.config, {}, ancestorObj, otherObj));
|
|
29
22
|
}
|
|
30
|
-
|
|
31
|
-
const result = this.executeNested(context);
|
|
32
|
-
if (!isEmpty(result.output)) {
|
|
33
|
-
return {
|
|
34
|
-
output: [{ [name]: result.output }],
|
|
35
|
-
hasConflict: result.hasConflict,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
// Empty result but key exists - preserve empty key
|
|
39
|
-
return noConflict([{ [name]: [] }]);
|
|
23
|
+
return wrapWithRootKey(this.executeNested(context), name);
|
|
40
24
|
}
|
|
41
|
-
// Nested level: other unchanged means return empty (local deleted)
|
|
42
25
|
if (otherUnchanged) {
|
|
43
26
|
return noConflict([]);
|
|
44
27
|
}
|
|
45
|
-
// Nested level with attribute (keyed array element)
|
|
46
28
|
if (context.attribute) {
|
|
47
29
|
return this.executeWithAttribute(context);
|
|
48
30
|
}
|
|
49
|
-
// Nested level conflict
|
|
50
31
|
return withConflict(buildConflictMarkers(context.config, {}, extractContent(toJsonArray(context.ancestor)), extractContent(toJsonArray(context.other))));
|
|
51
32
|
}
|
|
52
33
|
executeNested(context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AncestorAndOtherStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorAndOtherStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"AncestorAndOtherStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorAndOtherStrategy.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,EACL,cAAc,EACd,WAAW,EACX,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAG9B,MAAM,OAAO,wBAAwB;IACnC,OAAO,CAAC,OAAqB;QAC3B,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAEjE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,CAAA;YAE/C,IAAI,CAAC,aAAa,IAAI,cAAc,EAAE,CAAC;gBACrC,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;YACvB,CAAC;YAED,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAG;oBAClB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,QAAkC,CAAC;iBAChE,CAAA;gBACD,MAAM,QAAQ,GAAG;oBACf,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAA+B,CAAC;iBAC7D,CAAA;gBACD,OAAO,YAAY,CACjB,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAChE,CAAA;YACH,CAAC;YAED,OAAO,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;QACvB,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,YAAY,CACjB,oBAAoB,CAClB,OAAO,CAAC,MAAM,EACd,EAAE,EACF,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,QAAkC,CAAC,CAAC,EACvE,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,KAA+B,CAAC,CAAC,CACrE,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,cAAc,GAAG,YAAY,CAAC,KAAK,CACvC,EAAE,EACF,OAAO,CAAC,QAAQ,EAChB,EAAE,EACF,SAAS,CACV,CAAA;QACD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAExE,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,SAAU,CAAC,EAAE,cAAc,CAAC,MAAM,EAAE,CAAA;QACpE,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,SAAU,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,CAAA;QAE9D,OAAO,YAAY,CACjB,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,CAClE,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import { noConflict } from '../../types/mergeResult.js';
|
|
2
2
|
export class AncestorOnlyStrategy {
|
|
3
3
|
execute(context) {
|
|
4
|
-
// ANCESTOR_ONLY: deleted in both local and other
|
|
5
|
-
// Root level: check if key should exist in result
|
|
6
4
|
if (context.rootKey) {
|
|
7
5
|
const { name, existsInLocal, existsInOther } = context.rootKey;
|
|
8
6
|
if (existsInLocal || existsInOther) {
|
|
9
|
-
// Key exists with empty value - preserve empty key
|
|
10
7
|
return noConflict([{ [name]: [] }]);
|
|
11
8
|
}
|
|
12
|
-
// Key completely deleted - return nothing
|
|
13
9
|
return noConflict([]);
|
|
14
10
|
}
|
|
15
|
-
// Nested level: return empty (deleted)
|
|
16
11
|
return noConflict([]);
|
|
17
12
|
}
|
|
18
13
|
}
|
|
@@ -1 +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,
|
|
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,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,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;YACrC,CAAC;YACD,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;QACvB,CAAC;QACD,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;CACF"}
|
|
@@ -1,32 +1,20 @@
|
|
|
1
1
|
import { deepEqual } from 'fast-equals';
|
|
2
|
-
import { isEmpty } from 'lodash-es';
|
|
3
2
|
import { combineResults, noConflict } from '../../types/mergeResult.js';
|
|
4
|
-
import { getUniqueSortedProps, toJsonArray } from '../nodes/nodeUtils.js';
|
|
3
|
+
import { getUniqueSortedProps, toJsonArray, wrapWithRootKey, } from '../nodes/nodeUtils.js';
|
|
5
4
|
export class LocalAndOtherStrategy {
|
|
6
5
|
execute(context) {
|
|
7
6
|
const local = context.local;
|
|
8
7
|
const other = context.other;
|
|
9
|
-
// If identical, return other
|
|
10
8
|
if (deepEqual(local, other)) {
|
|
11
9
|
const content = toJsonArray(other);
|
|
12
|
-
// Root level: wrap with key
|
|
13
10
|
if (context.rootKey) {
|
|
14
11
|
return noConflict([{ [context.rootKey.name]: content }]);
|
|
15
12
|
}
|
|
16
13
|
return noConflict(content);
|
|
17
14
|
}
|
|
18
|
-
// Different - merge children
|
|
19
15
|
const result = this.mergeChildren(context);
|
|
20
|
-
// Root level: wrap result with key
|
|
21
16
|
if (context.rootKey) {
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
output: [{ [context.rootKey.name]: result.output }],
|
|
25
|
-
hasConflict: result.hasConflict,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
// Empty result but keys exist - preserve empty key
|
|
29
|
-
return noConflict([{ [context.rootKey.name]: [] }]);
|
|
17
|
+
return wrapWithRootKey(result, context.rootKey.name);
|
|
30
18
|
}
|
|
31
19
|
return result;
|
|
32
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalAndOtherStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/LocalAndOtherStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
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,EACL,oBAAoB,EACpB,WAAW,EACX,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAG9B,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,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;YAClC,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;YACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACtD,CAAC;QACD,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"}
|
|
@@ -3,11 +3,9 @@ import { toJsonArray } from '../nodes/nodeUtils.js';
|
|
|
3
3
|
export class LocalOnlyStrategy {
|
|
4
4
|
execute(context) {
|
|
5
5
|
const content = toJsonArray(context.local);
|
|
6
|
-
// Root level: wrap with key
|
|
7
6
|
if (context.rootKey) {
|
|
8
7
|
return noConflict([{ [context.rootKey.name]: content }]);
|
|
9
8
|
}
|
|
10
|
-
// Nested level: return content for parent to wrap
|
|
11
9
|
return noConflict(content);
|
|
12
10
|
}
|
|
13
11
|
}
|
|
@@ -1 +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;
|
|
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;QACpE,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;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;CACF"}
|
|
@@ -1 +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,
|
|
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,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;CACF"}
|
|
@@ -3,11 +3,9 @@ import { toJsonArray } from '../nodes/nodeUtils.js';
|
|
|
3
3
|
export class OtherOnlyStrategy {
|
|
4
4
|
execute(context) {
|
|
5
5
|
const content = toJsonArray(context.other);
|
|
6
|
-
// Root level: wrap with key
|
|
7
6
|
if (context.rootKey) {
|
|
8
7
|
return noConflict([{ [context.rootKey.name]: content }]);
|
|
9
8
|
}
|
|
10
|
-
// Nested level: return content for parent to wrap
|
|
11
9
|
return noConflict(content);
|
|
12
10
|
}
|
|
13
11
|
}
|
|
@@ -1 +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;
|
|
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;QACpE,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;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;CACF"}
|
|
@@ -13,7 +13,6 @@ export class LocalOnlyStrategy {
|
|
|
13
13
|
}
|
|
14
14
|
export class LocalAndOtherStrategy {
|
|
15
15
|
handle(config, _objAncestor, objLocal, objOther, _ancestor, local, other) {
|
|
16
|
-
// If both sides added the same value, no conflict
|
|
17
16
|
if (local === other) {
|
|
18
17
|
return noConflict([objLocal]);
|
|
19
18
|
}
|
|
@@ -38,19 +37,15 @@ export class AncestorAndLocalStrategy {
|
|
|
38
37
|
}
|
|
39
38
|
export class AllPresentStrategy {
|
|
40
39
|
handle(config, objAncestor, objLocal, objOther, ancestor, local, other) {
|
|
41
|
-
// No change in local - take other's value
|
|
42
40
|
if (ancestor === local) {
|
|
43
41
|
return noConflict([objOther]);
|
|
44
42
|
}
|
|
45
|
-
// No change in other - take local's value
|
|
46
43
|
if (ancestor === other) {
|
|
47
44
|
return noConflict([objLocal]);
|
|
48
45
|
}
|
|
49
|
-
// Both changed to same value - no conflict
|
|
50
46
|
if (local === other) {
|
|
51
47
|
return noConflict([objLocal]);
|
|
52
48
|
}
|
|
53
|
-
// Real conflict - build markers
|
|
54
49
|
return withConflict(buildConflictMarkers(config, objLocal, objAncestor, objOther));
|
|
55
50
|
}
|
|
56
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextMergeStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/TextMergeStrategy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAclE,MAAM,OAAO,iBAAiB;IAC5B,MAAM,CACJ,OAAoB,EACpB,YAAwB,EACxB,SAAqB,EACrB,QAAoB;QAEpB,OAAO,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,iBAAiB;IAC5B,MAAM,CACJ,OAAoB,EACpB,YAAwB,EACxB,QAAoB;QAEpB,OAAO,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IAChC,MAAM,CACJ,MAAmB,EACnB,YAAwB,EACxB,QAAoB,EACpB,QAAoB,EACpB,SAAkB,EAClB,KAAc,EACd,KAAc;QAEd,
|
|
1
|
+
{"version":3,"file":"TextMergeStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/TextMergeStrategy.ts"],"names":[],"mappings":"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"}
|
package/lib/types/mergeResult.js
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { isEmpty } from 'lodash-es';
|
|
2
|
-
// Pre-allocated constant for the common empty no-conflict case
|
|
3
|
-
// Used by NoneStrategy, AncestorOnlyStrategy, and equality-based early returns
|
|
4
2
|
const EMPTY_ARRAY = [];
|
|
5
3
|
const EMPTY_NO_CONFLICT = {
|
|
6
4
|
output: EMPTY_ARRAY,
|
|
7
5
|
hasConflict: false,
|
|
8
6
|
};
|
|
9
7
|
export const combineResults = (results) => {
|
|
10
|
-
// Fast path: no results
|
|
11
8
|
if (isEmpty(results)) {
|
|
12
9
|
return EMPTY_NO_CONFLICT;
|
|
13
10
|
}
|
|
14
|
-
// Fast path: single result
|
|
15
11
|
if (results.length === 1) {
|
|
16
12
|
return results[0];
|
|
17
13
|
}
|
|
@@ -21,7 +17,6 @@ export const combineResults = (results) => {
|
|
|
21
17
|
};
|
|
22
18
|
};
|
|
23
19
|
export const noConflict = (output) => {
|
|
24
|
-
// Reuse constant for empty arrays
|
|
25
20
|
if (isEmpty(output)) {
|
|
26
21
|
return EMPTY_NO_CONFLICT;
|
|
27
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeResult.js","sourceRoot":"","sources":["../../src/types/mergeResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC
|
|
1
|
+
{"version":3,"file":"mergeResult.js","sourceRoot":"","sources":["../../src/types/mergeResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,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,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB,OAAO,iBAAiB,CAAA;IAC1B,CAAC;IACD,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,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,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"}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sf-git-merge-driver",
|
|
3
|
-
"version": "1.4.0-dev-159.
|
|
3
|
+
"version": "1.4.0-dev-159.21320251314-1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "sf-git-merge-driver",
|
|
9
|
-
"version": "1.4.0-dev-159.
|
|
9
|
+
"version": "1.4.0-dev-159.21320251314-1",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@oclif/core": "^4.8.0",
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sf-git-merge-driver",
|
|
3
3
|
"description": "Git merge driver for Salesforce metadata XML files - automatically resolves merge conflicts in profiles, permission sets, and 50+ metadata types",
|
|
4
|
-
"version": "1.4.0-dev-159.
|
|
4
|
+
"version": "1.4.0-dev-159.21320251314-1",
|
|
5
5
|
"exports": "./lib/driver/MergeDriver.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"author": "Sébastien Colladon (colladonsebastien@gmail.com)",
|
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
"dependencies:upgrade": "npx npm-check-updates -u ; npm update ; npm audit fix",
|
|
78
78
|
"lint": "wireit",
|
|
79
79
|
"lint:dependencies": "wireit",
|
|
80
|
+
"lint:duplicates": "wireit",
|
|
80
81
|
"lint:fix": "wireit",
|
|
81
82
|
"lint:staged": "wireit",
|
|
82
83
|
"postpack": "shx rm -f oclif.manifest.json",
|
|
@@ -166,6 +167,18 @@
|
|
|
166
167
|
"lint"
|
|
167
168
|
]
|
|
168
169
|
},
|
|
170
|
+
"lint:duplicates": {
|
|
171
|
+
"command": "npx jscpd src",
|
|
172
|
+
"files": [
|
|
173
|
+
"src/**/*.ts"
|
|
174
|
+
],
|
|
175
|
+
"output": [
|
|
176
|
+
"reports/cpd/**"
|
|
177
|
+
],
|
|
178
|
+
"dependencies": [
|
|
179
|
+
"lint"
|
|
180
|
+
]
|
|
181
|
+
},
|
|
169
182
|
"lint:fix": {
|
|
170
183
|
"command": "npx @biomejs/biome check --error-on-warnings --no-errors-on-unmatched src test --fix --unsafe ",
|
|
171
184
|
"files": [
|