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.
Files changed (37) hide show
  1. package/README.md +3 -3
  2. package/lib/merger/ConflictMarkerFormatter.js +0 -4
  3. package/lib/merger/ConflictMarkerFormatter.js.map +1 -1
  4. package/lib/merger/MergeOrchestrator.js +0 -1
  5. package/lib/merger/MergeOrchestrator.js.map +1 -1
  6. package/lib/merger/XmlMerger.js +0 -2
  7. package/lib/merger/XmlMerger.js.map +1 -1
  8. package/lib/merger/nodes/TextArrayMergeNode.js +1 -14
  9. package/lib/merger/nodes/TextArrayMergeNode.js.map +1 -1
  10. package/lib/merger/nodes/TextMergeNode.js +1 -6
  11. package/lib/merger/nodes/TextMergeNode.js.map +1 -1
  12. package/lib/merger/nodes/nodeUtils.d.ts +3 -0
  13. package/lib/merger/nodes/nodeUtils.js +12 -1
  14. package/lib/merger/nodes/nodeUtils.js.map +1 -1
  15. package/lib/merger/strategies/AllPresentStrategy.js +2 -14
  16. package/lib/merger/strategies/AllPresentStrategy.js.map +1 -1
  17. package/lib/merger/strategies/AncestorAndLocalStrategy.js +2 -21
  18. package/lib/merger/strategies/AncestorAndLocalStrategy.js.map +1 -1
  19. package/lib/merger/strategies/AncestorAndOtherStrategy.js +2 -21
  20. package/lib/merger/strategies/AncestorAndOtherStrategy.js.map +1 -1
  21. package/lib/merger/strategies/AncestorOnlyStrategy.js +0 -5
  22. package/lib/merger/strategies/AncestorOnlyStrategy.js.map +1 -1
  23. package/lib/merger/strategies/LocalAndOtherStrategy.js +2 -14
  24. package/lib/merger/strategies/LocalAndOtherStrategy.js.map +1 -1
  25. package/lib/merger/strategies/LocalOnlyStrategy.js +0 -2
  26. package/lib/merger/strategies/LocalOnlyStrategy.js.map +1 -1
  27. package/lib/merger/strategies/NoneStrategy.js +0 -1
  28. package/lib/merger/strategies/NoneStrategy.js.map +1 -1
  29. package/lib/merger/strategies/OtherOnlyStrategy.js +0 -2
  30. package/lib/merger/strategies/OtherOnlyStrategy.js.map +1 -1
  31. package/lib/merger/strategies/TextMergeStrategy.js +0 -5
  32. package/lib/merger/strategies/TextMergeStrategy.js.map +1 -1
  33. package/lib/types/mergeResult.js +0 -5
  34. package/lib/types/mergeResult.js.map +1 -1
  35. package/npm-shrinkwrap.json +2 -2
  36. package/oclif.manifest.json +1 -1
  37. 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.21317420119-1/src/commands/git/merge/driver/install.ts)_
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.21317420119-1/src/commands/git/merge/driver/run.ts)_
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.21317420119-1/src/commands/git/merge/driver/uninstall.ts)_
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 = '&lt;'.repeat(size);
19
17
  this.otherEntity = '&gt;'.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,wCAAwC;QACxC,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,mDAAmD;QACnD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEtC,4CAA4C;QAC5C,0DAA0D;QAC1D,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"}
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,wDAAwD;QACxD,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"}
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"}
@@ -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,oCAAoC;QACpC,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,iCAAiC;QACjC,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;AA/BC;IADC,GAAG;8CAuBH"}
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
- const generateObj = (value, attrib) => {
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":"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"}
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
- const generateObj = (value, attrib) => {
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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAI3D,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;AAGzE,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,MAAc,EAAc,EAAE;IAC1E,OAAO,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,CAAA;AAClE,CAAC,CAAA;AAED,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,yEAAyE;QACzE,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
+ {"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
- if (!isEmpty(result.output)) {
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,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,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,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"}
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
- // Other key exists with empty value - delegate to nested merge, wrap result
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":"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"}
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
- // Local key exists with empty value - delegate to nested merge, wrap result
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":"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"}
1
+ {"version":3,"file":"AncestorAndOtherStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorAndOtherStrategy.ts"],"names":[],"mappings":"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"}
@@ -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,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"}
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
- if (!isEmpty(result.output)) {
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;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,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,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,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"}
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;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"}
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,7 +1,6 @@
1
1
  import { noConflict } from '../../types/mergeResult.js';
2
2
  export class NoneStrategy {
3
3
  execute(_context) {
4
- // NONE scenario: nothing exists anywhere, return empty
5
4
  return noConflict([]);
6
5
  }
7
6
  }
@@ -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,uDAAuD;QACvD,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;CACF"}
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;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"}
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":"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"}
1
+ {"version":3,"file":"TextMergeStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/TextMergeStrategy.ts"],"names":[],"mappings":"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"}
@@ -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,+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,OAAO,CAAC,EAAE,CAAC;QACrB,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,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"}
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"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "sf-git-merge-driver",
3
- "version": "1.4.0-dev-159.21317420119-1",
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.21317420119-1",
9
+ "version": "1.4.0-dev-159.21320251314-1",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@oclif/core": "^4.8.0",
@@ -338,5 +338,5 @@
338
338
  ]
339
339
  }
340
340
  },
341
- "version": "1.4.0-dev-159.21317420119-1"
341
+ "version": "1.4.0-dev-159.21320251314-1"
342
342
  }
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.21317420119-1",
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": [