sf-git-merge-driver 1.4.0-dev-159.21317248282-1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +6 -30
  2. package/lib/commands/git/merge/driver/run.js +5 -3
  3. package/lib/commands/git/merge/driver/run.js.map +1 -1
  4. package/lib/constant/conflictConstant.d.ts +3 -3
  5. package/lib/constant/conflictConstant.js +3 -3
  6. package/lib/constant/conflictConstant.js.map +1 -1
  7. package/lib/constant/parserConstant.d.ts +0 -6
  8. package/lib/constant/parserConstant.js +0 -6
  9. package/lib/constant/parserConstant.js.map +1 -1
  10. package/lib/driver/MergeDriver.d.ts +0 -3
  11. package/lib/driver/MergeDriver.js +1 -5
  12. package/lib/driver/MergeDriver.js.map +1 -1
  13. package/lib/merger/JsonMerger.d.ts +0 -3
  14. package/lib/merger/JsonMerger.js +212 -20
  15. package/lib/merger/JsonMerger.js.map +1 -1
  16. package/lib/merger/XmlMerger.d.ts +0 -5
  17. package/lib/merger/XmlMerger.js +16 -19
  18. package/lib/merger/XmlMerger.js.map +1 -1
  19. package/lib/merger/conflictMarker.d.ts +12 -0
  20. package/lib/merger/conflictMarker.js +48 -0
  21. package/lib/merger/conflictMarker.js.map +1 -0
  22. package/lib/merger/textAttribute.d.ts +3 -0
  23. package/lib/merger/textAttribute.js +56 -0
  24. package/lib/merger/textAttribute.js.map +1 -0
  25. package/lib/service/NamespaceHandler.js +2 -1
  26. package/lib/service/NamespaceHandler.js.map +1 -1
  27. package/lib/types/conflictTypes.d.ts +1 -1
  28. package/lib/types/mergeScenario.d.ts +1 -0
  29. package/lib/types/mergeScenario.js +20 -0
  30. package/lib/types/mergeScenario.js.map +1 -1
  31. package/lib/utils/mergeUtils.d.ts +5 -0
  32. package/lib/utils/mergeUtils.js +14 -0
  33. package/lib/utils/mergeUtils.js.map +1 -1
  34. package/npm-shrinkwrap.json +2 -2
  35. package/oclif.manifest.json +4 -4
  36. package/package.json +2 -2
  37. package/lib/merger/ConflictMarkerBuilder.d.ts +0 -3
  38. package/lib/merger/ConflictMarkerBuilder.js +0 -33
  39. package/lib/merger/ConflictMarkerBuilder.js.map +0 -1
  40. package/lib/merger/ConflictMarkerFormatter.d.ts +0 -14
  41. package/lib/merger/ConflictMarkerFormatter.js +0 -43
  42. package/lib/merger/ConflictMarkerFormatter.js.map +0 -1
  43. package/lib/merger/MergeContext.d.ts +0 -17
  44. package/lib/merger/MergeContext.js +0 -2
  45. package/lib/merger/MergeContext.js.map +0 -1
  46. package/lib/merger/MergeOrchestrator.d.ts +0 -13
  47. package/lib/merger/MergeOrchestrator.js +0 -46
  48. package/lib/merger/MergeOrchestrator.js.map +0 -1
  49. package/lib/merger/MergeScenarioFactory.d.ts +0 -2
  50. package/lib/merger/MergeScenarioFactory.js +0 -22
  51. package/lib/merger/MergeScenarioFactory.js.map +0 -1
  52. package/lib/merger/nodes/KeyedArrayMergeNode.d.ts +0 -12
  53. package/lib/merger/nodes/KeyedArrayMergeNode.js +0 -67
  54. package/lib/merger/nodes/KeyedArrayMergeNode.js.map +0 -1
  55. package/lib/merger/nodes/MergeNode.d.ts +0 -5
  56. package/lib/merger/nodes/MergeNode.js +0 -2
  57. package/lib/merger/nodes/MergeNode.js.map +0 -1
  58. package/lib/merger/nodes/MergeNodeFactory.d.ts +0 -9
  59. package/lib/merger/nodes/MergeNodeFactory.js +0 -21
  60. package/lib/merger/nodes/MergeNodeFactory.js.map +0 -1
  61. package/lib/merger/nodes/ObjectMergeNode.d.ts +0 -20
  62. package/lib/merger/nodes/ObjectMergeNode.js +0 -49
  63. package/lib/merger/nodes/ObjectMergeNode.js.map +0 -1
  64. package/lib/merger/nodes/TextArrayMergeNode.d.ts +0 -12
  65. package/lib/merger/nodes/TextArrayMergeNode.js +0 -66
  66. package/lib/merger/nodes/TextArrayMergeNode.js.map +0 -1
  67. package/lib/merger/nodes/TextMergeNode.d.ts +0 -12
  68. package/lib/merger/nodes/TextMergeNode.js +0 -36
  69. package/lib/merger/nodes/TextMergeNode.js.map +0 -1
  70. package/lib/merger/nodes/nodeUtils.d.ts +0 -5
  71. package/lib/merger/nodes/nodeUtils.js +0 -20
  72. package/lib/merger/nodes/nodeUtils.js.map +0 -1
  73. package/lib/merger/strategies/AllPresentStrategy.d.ts +0 -7
  74. package/lib/merger/strategies/AllPresentStrategy.js +0 -36
  75. package/lib/merger/strategies/AllPresentStrategy.js.map +0 -1
  76. package/lib/merger/strategies/AncestorAndLocalStrategy.d.ts +0 -8
  77. package/lib/merger/strategies/AncestorAndLocalStrategy.js +0 -64
  78. package/lib/merger/strategies/AncestorAndLocalStrategy.js.map +0 -1
  79. package/lib/merger/strategies/AncestorAndOtherStrategy.d.ts +0 -8
  80. package/lib/merger/strategies/AncestorAndOtherStrategy.js +0 -64
  81. package/lib/merger/strategies/AncestorAndOtherStrategy.js.map +0 -1
  82. package/lib/merger/strategies/AncestorOnlyStrategy.d.ts +0 -6
  83. package/lib/merger/strategies/AncestorOnlyStrategy.js +0 -19
  84. package/lib/merger/strategies/AncestorOnlyStrategy.js.map +0 -1
  85. package/lib/merger/strategies/LocalAndOtherStrategy.d.ts +0 -7
  86. package/lib/merger/strategies/LocalAndOtherStrategy.js +0 -45
  87. package/lib/merger/strategies/LocalAndOtherStrategy.js.map +0 -1
  88. package/lib/merger/strategies/LocalOnlyStrategy.d.ts +0 -6
  89. package/lib/merger/strategies/LocalOnlyStrategy.js +0 -14
  90. package/lib/merger/strategies/LocalOnlyStrategy.js.map +0 -1
  91. package/lib/merger/strategies/NoneStrategy.d.ts +0 -6
  92. package/lib/merger/strategies/NoneStrategy.js +0 -8
  93. package/lib/merger/strategies/NoneStrategy.js.map +0 -1
  94. package/lib/merger/strategies/OtherOnlyStrategy.d.ts +0 -6
  95. package/lib/merger/strategies/OtherOnlyStrategy.js +0 -14
  96. package/lib/merger/strategies/OtherOnlyStrategy.js.map +0 -1
  97. package/lib/merger/strategies/ScenarioStrategy.d.ts +0 -5
  98. package/lib/merger/strategies/ScenarioStrategy.js +0 -2
  99. package/lib/merger/strategies/ScenarioStrategy.js.map +0 -1
  100. package/lib/merger/strategies/ScenarioStrategyFactory.d.ts +0 -3
  101. package/lib/merger/strategies/ScenarioStrategyFactory.js +0 -23
  102. package/lib/merger/strategies/ScenarioStrategyFactory.js.map +0 -1
  103. package/lib/merger/strategies/TextMergeStrategy.d.ts +0 -32
  104. package/lib/merger/strategies/TextMergeStrategy.js +0 -80
  105. package/lib/merger/strategies/TextMergeStrategy.js.map +0 -1
  106. package/lib/types/mergeResult.d.ts +0 -8
  107. package/lib/types/mergeResult.js +0 -33
  108. package/lib/types/mergeResult.js.map +0 -1
@@ -0,0 +1,48 @@
1
+ import { isEmpty } from 'lodash-es';
2
+ import { ANCESTOR_CONFLICT_MARKER, LOCAL_CONFLICT_MARKER, OTHER_CONFLICT_MARKER, SEPARATOR, } from '../constant/conflictConstant.js';
3
+ import { SALESFORCE_EOL } from '../constant/metadataConstant.js';
4
+ import { TEXT_TAG } from '../constant/parserConstant.js';
5
+ const buildMarker = (marker, size, tag) => {
6
+ return `${marker.repeat(size)} ${tag}`;
7
+ };
8
+ const buildSeparator = (size) => {
9
+ return `${SEPARATOR.repeat(size)}`;
10
+ };
11
+ const getEmptyValue = () => {
12
+ return { [TEXT_TAG]: SALESFORCE_EOL };
13
+ };
14
+ const getMarkerValue = (marker, withEol = false) => {
15
+ return { [TEXT_TAG]: `${withEol ? SALESFORCE_EOL : ''}${marker}` };
16
+ };
17
+ export class ConflictMarker {
18
+ static hasConflict = false;
19
+ static baseMarker;
20
+ static localMarker;
21
+ static otherMarker;
22
+ static separatorMarker;
23
+ static hasConflictMarker() {
24
+ return ConflictMarker.hasConflict;
25
+ }
26
+ static addConflictMarkers(acc, local, ancestor, other) {
27
+ ConflictMarker.hasConflict = true;
28
+ const [localValue, ancestorValue, otherValue] = [
29
+ local,
30
+ ancestor,
31
+ other,
32
+ ].map(value => (isEmpty(value) ? getEmptyValue() : value));
33
+ acc.push(getMarkerValue(ConflictMarker.localMarker, true));
34
+ acc.push(localValue);
35
+ acc.push(getMarkerValue(ConflictMarker.baseMarker));
36
+ acc.push(ancestorValue);
37
+ acc.push(getMarkerValue(ConflictMarker.separatorMarker));
38
+ acc.push(otherValue);
39
+ acc.push(getMarkerValue(ConflictMarker.otherMarker));
40
+ }
41
+ static setConflictConfig(conflictConfig) {
42
+ ConflictMarker.baseMarker = buildMarker(ANCESTOR_CONFLICT_MARKER, conflictConfig.conflictMarkerSize, conflictConfig.ancestorConflictTag);
43
+ ConflictMarker.localMarker = buildMarker(LOCAL_CONFLICT_MARKER, conflictConfig.conflictMarkerSize, conflictConfig.localConflictTag);
44
+ ConflictMarker.otherMarker = buildMarker(OTHER_CONFLICT_MARKER, conflictConfig.conflictMarkerSize, conflictConfig.otherConflictTag);
45
+ ConflictMarker.separatorMarker = buildSeparator(conflictConfig.conflictMarkerSize);
46
+ }
47
+ }
48
+ //# sourceMappingURL=conflictMarker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflictMarker.js","sourceRoot":"","sources":["../../src/merger/conflictMarker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { JsonArray, JsonObject, JsonValue } from '../types/jsonTypes.js';
2
+ export declare const generateObj: (value: JsonValue | null, attrib: string) => JsonObject;
3
+ export declare const mergeTextAttribute: (ancestor: JsonValue | null, local: JsonValue | null, other: JsonValue | null, attrib: string) => JsonArray;
@@ -0,0 +1,56 @@
1
+ import { deepEqual } from 'fast-equals';
2
+ import { isNil } from 'lodash-es';
3
+ import { TEXT_TAG } from '../constant/parserConstant.js';
4
+ import { getScenario, MergeScenario } from '../types/mergeScenario.js';
5
+ import { ConflictMarker } from './conflictMarker.js';
6
+ export const generateObj = (value, attrib) => {
7
+ return isNil(value) ? {} : { [attrib]: [{ [TEXT_TAG]: value }] };
8
+ };
9
+ export const mergeTextAttribute = (ancestor, local, other, attrib) => {
10
+ const objAnc = generateObj(ancestor, attrib);
11
+ const objlocal = generateObj(local, attrib);
12
+ const objother = generateObj(other, attrib);
13
+ const scenario = getScenario(objAnc, objlocal, objother);
14
+ const acc = [];
15
+ // Early return for identical values
16
+ if (deepEqual(local, other) &&
17
+ (scenario === MergeScenario.LOCAL_AND_OTHER ||
18
+ scenario === MergeScenario.ALL)) {
19
+ return [objlocal];
20
+ }
21
+ // Handle specific merge scenarios
22
+ switch (scenario) {
23
+ case MergeScenario.OTHER_ONLY:
24
+ acc.push(objother);
25
+ break;
26
+ case MergeScenario.LOCAL_ONLY:
27
+ acc.push(objlocal);
28
+ break;
29
+ case MergeScenario.LOCAL_AND_OTHER:
30
+ ConflictMarker.addConflictMarkers(acc, objlocal, {}, objother);
31
+ break;
32
+ case MergeScenario.ANCESTOR_AND_OTHER:
33
+ if (ancestor !== other) {
34
+ ConflictMarker.addConflictMarkers(acc, {}, objAnc, objother);
35
+ }
36
+ break;
37
+ case MergeScenario.ANCESTOR_AND_LOCAL:
38
+ if (ancestor !== local) {
39
+ ConflictMarker.addConflictMarkers(acc, objlocal, objAnc, {});
40
+ }
41
+ break;
42
+ case MergeScenario.ALL:
43
+ if (ancestor === local) {
44
+ acc.push(objother);
45
+ }
46
+ else if (ancestor === other) {
47
+ acc.push(objlocal);
48
+ }
49
+ else {
50
+ ConflictMarker.addConflictMarkers(acc, objlocal, objAnc, objother);
51
+ }
52
+ break;
53
+ }
54
+ return acc;
55
+ };
56
+ //# sourceMappingURL=textAttribute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textAttribute.js","sourceRoot":"","sources":["../../src/merger/textAttribute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAuB,EACvB,MAAc,EACF,EAAE;IACd,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,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAA0B,EAC1B,KAAuB,EACvB,KAAuB,EACvB,MAAc,EACH,EAAE;IACb,MAAM,MAAM,GAAe,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAe,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAe,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAkB,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACvE,MAAM,GAAG,GAAc,EAAE,CAAA;IAEzB,oCAAoC;IACpC,IACE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;QACvB,CAAC,QAAQ,KAAK,aAAa,CAAC,eAAe;YACzC,QAAQ,KAAK,aAAa,CAAC,GAAG,CAAC,EACjC,CAAC;QACD,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnB,CAAC;IAED,kCAAkC;IAClC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,aAAa,CAAC,UAAU;YAC3B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClB,MAAK;QAEP,KAAK,aAAa,CAAC,UAAU;YAC3B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClB,MAAK;QAEP,KAAK,aAAa,CAAC,eAAe;YAChC,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;YAC9D,MAAK;QAEP,KAAK,aAAa,CAAC,kBAAkB;YACnC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACvB,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC9D,CAAC;YACD,MAAK;QAEP,KAAK,aAAa,CAAC,kBAAkB;YACnC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACvB,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;YAC9D,CAAC;YACD,MAAK;QAEP,KAAK,aAAa,CAAC,GAAG;YACpB,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,CAAC;iBAAM,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBAC9B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YACpE,CAAC;YACD,MAAK;IACT,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { __decorate } from "tslib";
2
- import { NAMESPACE_PREFIX, NAMESPACE_ROOT } from '../constant/parserConstant.js';
3
2
  import { log } from '../utils/LoggingDecorator.js';
3
+ const NAMESPACE_PREFIX = '@_';
4
+ const NAMESPACE_ROOT = ':@';
4
5
  export class NamespaceHandler {
5
6
  processNamespaces(ancestor, local, other) {
6
7
  const namespaces = {};
@@ -1 +1 @@
1
- {"version":3,"file":"NamespaceHandler.js","sourceRoot":"","sources":["../../src/service/NamespaceHandler.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAEhF,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAElD,MAAM,OAAO,gBAAgB;IAEpB,iBAAiB,CACtB,QAAgC,EAChC,KAA6B,EAC7B,KAA6B;QAE7B,MAAM,UAAU,GAAe,EAAE,CAAA;QAEjC,2DAA2D;QAC3D,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,iEAAiE;gBACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAe,CAAA;gBACvC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7C,IAAI,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;wBAC1C,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;wBACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAA,CAAC,8CAA8C;oBAC1E,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;IAGM,qBAAqB,CAAC,GAAc,EAAE,UAAsB;QACjE,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,iCAAiC;YACjC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAe,CAAA;YAEvC,yDAAyD;YACzD,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,CAAA;YAE/B,0DAA0D;YAC1D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,CAAC;gBAAC,UAAU,CAAC,cAAc,CAAgB,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;YACpE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAvCQ;IADN,GAAG;yDAuBH;AAGM;IADN,GAAG;6DAcH"}
1
+ {"version":3,"file":"NamespaceHandler.js","sourceRoot":"","sources":["../../src/service/NamespaceHandler.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAElD,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAC7B,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B,MAAM,OAAO,gBAAgB;IAEpB,iBAAiB,CACtB,QAAgC,EAChC,KAA6B,EAC7B,KAA6B;QAE7B,MAAM,UAAU,GAAe,EAAE,CAAA;QAEjC,2DAA2D;QAC3D,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,iEAAiE;gBACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAe,CAAA;gBACvC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7C,IAAI,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;wBAC1C,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;wBACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAA,CAAC,8CAA8C;oBAC1E,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;IAGM,qBAAqB,CAAC,GAAc,EAAE,UAAsB;QACjE,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,iCAAiC;YACjC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAe,CAAA;YAEvC,yDAAyD;YACzD,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,CAAA;YAE/B,0DAA0D;YAC1D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,CAAC;gBAAC,UAAU,CAAC,cAAc,CAAgB,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;YACpE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAvCQ;IADN,GAAG;yDAuBH;AAGM;IADN,GAAG;6DAcH"}
@@ -1,4 +1,4 @@
1
- export interface MergeConfig {
1
+ export interface conflicConfig {
2
2
  conflictMarkerSize: number;
3
3
  ancestorConflictTag: string;
4
4
  localConflictTag: string;
@@ -14,3 +14,4 @@ export declare enum MergeScenario {
14
14
  ANCESTOR_AND_LOCAL = 110,// Ancestor and local have content, no other (110)
15
15
  ALL = 111
16
16
  }
17
+ export declare const getScenario: (ancestor: any, local: any, other: any) => MergeScenario;
@@ -1,3 +1,4 @@
1
+ import { isEmpty } from 'lodash-es';
1
2
  /**
2
3
  * Enum representing different merge scenarios based on content presence:
3
4
  * - First position: Ancestor content present (1) or absent (0)
@@ -15,4 +16,23 @@ export var MergeScenario;
15
16
  MergeScenario[MergeScenario["ANCESTOR_AND_LOCAL"] = 110] = "ANCESTOR_AND_LOCAL";
16
17
  MergeScenario[MergeScenario["ALL"] = 111] = "ALL";
17
18
  })(MergeScenario || (MergeScenario = {}));
19
+ export const getScenario = (
20
+ // biome-ignore lint/suspicious/noExplicitAny: can be any metadata in json format
21
+ ancestor,
22
+ // biome-ignore lint/suspicious/noExplicitAny: can be any metadata in json format
23
+ local,
24
+ // biome-ignore lint/suspicious/noExplicitAny: can be any metadata in json format
25
+ other) => {
26
+ let scenario = MergeScenario.NONE;
27
+ if (!isEmpty(ancestor)) {
28
+ scenario += 100;
29
+ }
30
+ if (!isEmpty(local)) {
31
+ scenario += 10;
32
+ }
33
+ if (!isEmpty(other)) {
34
+ scenario += 1;
35
+ }
36
+ return scenario;
37
+ };
18
38
  //# sourceMappingURL=mergeScenario.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mergeScenario.js","sourceRoot":"","sources":["../../src/types/mergeScenario.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACvB,iDAAQ,CAAA;IACR,6DAAc,CAAA;IACd,8DAAe,CAAA;IACf,wEAAoB,CAAA;IACpB,qEAAmB,CAAA;IACnB,+EAAwB,CAAA;IACxB,+EAAwB,CAAA;IACxB,iDAAS,CAAA;AACX,CAAC,EATW,aAAa,KAAb,aAAa,QASxB"}
1
+ {"version":3,"file":"mergeScenario.js","sourceRoot":"","sources":["../../src/types/mergeScenario.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC;;;;;GAKG;AACH,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACvB,iDAAQ,CAAA;IACR,6DAAc,CAAA;IACd,8DAAe,CAAA;IACf,wEAAoB,CAAA;IACpB,qEAAmB,CAAA;IACnB,+EAAwB,CAAA;IACxB,+EAAwB,CAAA;IACxB,iDAAS,CAAA;AACX,CAAC,EATW,aAAa,KAAb,aAAa,QASxB;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;AACzB,iFAAiF;AACjF,QAAa;AACb,iFAAiF;AACjF,KAAU;AACV,iFAAiF;AACjF,KAAU,EACK,EAAE;IACjB,IAAI,QAAQ,GAAkB,aAAa,CAAC,IAAI,CAAA;IAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,QAAQ,IAAI,GAAG,CAAA;IACjB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,QAAQ,IAAI,EAAE,CAAA;IAChB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,QAAQ,IAAI,CAAC,CAAA;IACf,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -1,2 +1,7 @@
1
+ import type { JsonArray, JsonObject, JsonValue } from '../types/jsonTypes.js';
2
+ export declare const isObject: (ancestor: JsonValue | undefined | null, local: JsonValue | undefined | null, other: JsonValue | undefined | null) => boolean;
3
+ export declare const isStringArray: (ancestor: JsonValue | undefined | null, local: JsonValue | undefined | null, other: JsonValue | undefined | null) => boolean;
4
+ export declare const ensureArray: (value: JsonValue) => JsonArray;
5
+ export declare const getUniqueSortedProps: (...objects: (JsonObject | JsonArray)[]) => string[];
1
6
  export declare const detectEol: (text: string) => string;
2
7
  export declare const normalizeEol: (text: string, eol?: string) => string;
@@ -1,9 +1,23 @@
1
+ import { castArray, isNil } from 'lodash-es';
1
2
  import { EOL } from 'os';
2
3
  const CR = '\r';
3
4
  const LF = '\n';
4
5
  const CRLF = `${CR}${LF}`;
5
6
  const RE_CRLF = /\r\n/g;
6
7
  const RE_LF_OR_CRLF = /\r\n|\n/g;
8
+ export const isObject = (ancestor, local, other) =>
9
+ // typeof [ancestor, other, local].find(ele => !isNil(ele)) === 'object'
10
+ [ancestor, local, other].some(ele => !isNil(ele) && typeof ele === 'object');
11
+ export const isStringArray = (ancestor, local, other) =>
12
+ // typeof [ancestor, other, local].find(ele => !isNil(ele)) === 'object'
13
+ [ancestor, local, other].some(ele => !isNil(ele) &&
14
+ Array.isArray(ele) &&
15
+ ele.every(item => typeof item === 'string' || item instanceof String));
16
+ export const ensureArray = (value) => isNil(value) ? [] : castArray(value);
17
+ export const getUniqueSortedProps = (...objects) => Array.from(new Set([...objects]
18
+ .filter(jsonElement => ![undefined, null].includes(jsonElement))
19
+ .map(Object.keys)
20
+ .flat())).sort();
7
21
  export const detectEol = (text) => {
8
22
  if (!text) {
9
23
  return EOL;
@@ -1 +1 @@
1
- {"version":3,"file":"mergeUtils.js","sourceRoot":"","sources":["../../src/utils/mergeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AAExB,MAAM,EAAE,GAAG,IAAI,CAAA;AACf,MAAM,EAAE,GAAG,IAAI,CAAA;AACf,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAA;AACzB,MAAM,OAAO,GAAG,OAAO,CAAA;AACvB,MAAM,aAAa,GAAG,UAAU,CAAA;AAEhC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,KAAK,GAAG,KAAK,CAAA;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBAChC,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,IAAI,CAAA;YACd,CAAC;YAED,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;gBACrB,OAAO,GAAG,CAAA;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,MAAc,GAAG,EAAU,EAAE;IACtE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,KAAK,GAAG,OAAO,CAAA;IACnB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,KAAK,GAAG,aAAa,CAAA;IACvB,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC,CAAA"}
1
+ {"version":3,"file":"mergeUtils.js","sourceRoot":"","sources":["../../src/utils/mergeUtils.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "sf-git-merge-driver",
3
- "version": "1.4.0-dev-159.21317248282-1",
3
+ "version": "1.4.0",
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.21317248282-1",
9
+ "version": "1.4.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@oclif/core": "^4.8.0",
@@ -170,7 +170,7 @@
170
170
  "char": "S",
171
171
  "name": "ancestor-conflict-tag",
172
172
  "summary": "string used to tag ancestor version in conflicts",
173
- "default": "base",
173
+ "default": "BASE",
174
174
  "hasDynamicHelp": false,
175
175
  "multiple": false,
176
176
  "type": "option"
@@ -179,7 +179,7 @@
179
179
  "char": "X",
180
180
  "name": "local-conflict-tag",
181
181
  "summary": "string used to tag local version in conflicts",
182
- "default": "ours",
182
+ "default": "LOCAL",
183
183
  "hasDynamicHelp": false,
184
184
  "multiple": false,
185
185
  "type": "option"
@@ -188,7 +188,7 @@
188
188
  "char": "Y",
189
189
  "name": "other-conflict-tag",
190
190
  "summary": "string used to tag other version in conflicts",
191
- "default": "theirs",
191
+ "default": "REMOTE",
192
192
  "hasDynamicHelp": false,
193
193
  "multiple": false,
194
194
  "type": "option"
@@ -338,5 +338,5 @@
338
338
  ]
339
339
  }
340
340
  },
341
- "version": "1.4.0-dev-159.21317248282-1"
341
+ "version": "1.4.0"
342
342
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sf-git-merge-driver",
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.21317248282-1",
3
+ "description": "git remote add origin git@github.com:scolladon/sf-git-merge-driver.git",
4
+ "version": "1.4.0",
5
5
  "exports": "./lib/driver/MergeDriver.js",
6
6
  "type": "module",
7
7
  "author": "Sébastien Colladon (colladonsebastien@gmail.com)",
@@ -1,3 +0,0 @@
1
- import type { MergeConfig } from '../types/conflictTypes.js';
2
- import type { JsonArray, JsonObject } from '../types/jsonTypes.js';
3
- export declare const buildConflictMarkers: (config: MergeConfig, local: JsonObject | JsonArray, ancestor: JsonObject | JsonArray, other: JsonObject | JsonArray) => JsonArray;
@@ -1,33 +0,0 @@
1
- import { isEmpty } from 'lodash-es';
2
- import { ANCESTOR_CONFLICT_MARKER, LOCAL_CONFLICT_MARKER, OTHER_CONFLICT_MARKER, SEPARATOR, } from '../constant/conflictConstant.js';
3
- import { SALESFORCE_EOL } from '../constant/metadataConstant.js';
4
- import { TEXT_TAG } from '../constant/parserConstant.js';
5
- const buildMarker = (marker, size, tag) => {
6
- return `${marker.repeat(size)} ${tag}`;
7
- };
8
- const buildSeparator = (size) => {
9
- return `${SEPARATOR.repeat(size)}`;
10
- };
11
- const getEmptyValue = () => {
12
- return { [TEXT_TAG]: SALESFORCE_EOL };
13
- };
14
- const getMarkerValue = (marker, withEol = false) => {
15
- return { [TEXT_TAG]: `${withEol ? SALESFORCE_EOL : ''}${marker}` };
16
- };
17
- export const buildConflictMarkers = (config, local, ancestor, other) => {
18
- const localMarker = buildMarker(LOCAL_CONFLICT_MARKER, config.conflictMarkerSize, config.localConflictTag);
19
- const baseMarker = buildMarker(ANCESTOR_CONFLICT_MARKER, config.conflictMarkerSize, config.ancestorConflictTag);
20
- const otherMarker = buildMarker(OTHER_CONFLICT_MARKER, config.conflictMarkerSize, config.otherConflictTag);
21
- const separatorMarker = buildSeparator(config.conflictMarkerSize);
22
- const [localValue, ancestorValue, otherValue] = [local, ancestor, other].map(value => (isEmpty(value) ? getEmptyValue() : value));
23
- return [
24
- getMarkerValue(localMarker, true),
25
- localValue,
26
- getMarkerValue(baseMarker),
27
- ancestorValue,
28
- getMarkerValue(separatorMarker),
29
- otherValue,
30
- getMarkerValue(otherMarker),
31
- ];
32
- };
33
- //# sourceMappingURL=ConflictMarkerBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConflictMarkerBuilder.js","sourceRoot":"","sources":["../../src/merger/ConflictMarkerBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,SAAS,GACV,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAIxD,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,GAAW,EAAU,EAAE;IACxE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;AACxC,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;IAC9C,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;AACpC,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,GAAe,EAAE;IACrC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CACrB,MAAc,EACd,UAAmB,KAAK,EACZ,EAAE;IACd,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,CAAA;AACpE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAAmB,EACnB,KAA6B,EAC7B,QAAgC,EAChC,KAA6B,EAClB,EAAE;IACb,MAAM,WAAW,GAAG,WAAW,CAC7B,qBAAqB,EACrB,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,gBAAgB,CACxB,CAAA;IACD,MAAM,UAAU,GAAG,WAAW,CAC5B,wBAAwB,EACxB,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,mBAAmB,CAC3B,CAAA;IACD,MAAM,WAAW,GAAG,WAAW,CAC7B,qBAAqB,EACrB,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,gBAAgB,CACxB,CAAA;IACD,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAEjE,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,CAC1E,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CACpD,CAAA;IAED,OAAO;QACL,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;QACjC,UAAU;QACV,cAAc,CAAC,UAAU,CAAC;QAC1B,aAAa;QACb,cAAc,CAAC,eAAe,CAAC;QAC/B,UAAU;QACV,cAAc,CAAC,WAAW,CAAC;KAC5B,CAAA;AACH,CAAC,CAAA"}
@@ -1,14 +0,0 @@
1
- import type { MergeConfig } from '../types/conflictTypes.js';
2
- export declare class ConflictMarkerFormatter {
3
- private readonly localMarker;
4
- private readonly ancestorMarker;
5
- private readonly separator;
6
- private readonly otherMarker;
7
- private readonly localEntity;
8
- private readonly otherEntity;
9
- private readonly indentRegex;
10
- constructor(config: MergeConfig);
11
- correctConflictIndent(xml: string): string;
12
- handleSpecialEntities(xml: string): string;
13
- private escapeRegex;
14
- }
@@ -1,43 +0,0 @@
1
- import { ANCESTOR_CONFLICT_MARKER, LOCAL_CONFLICT_MARKER, OTHER_CONFLICT_MARKER, SEPARATOR, } from '../constant/conflictConstant.js';
2
- export class ConflictMarkerFormatter {
3
- localMarker;
4
- ancestorMarker;
5
- separator;
6
- otherMarker;
7
- localEntity;
8
- otherEntity;
9
- indentRegex;
10
- constructor(config) {
11
- const size = config.conflictMarkerSize;
12
- // Build marker strings from config size
13
- this.localMarker = LOCAL_CONFLICT_MARKER.repeat(size);
14
- this.ancestorMarker = ANCESTOR_CONFLICT_MARKER.repeat(size);
15
- this.separator = SEPARATOR.repeat(size);
16
- this.otherMarker = OTHER_CONFLICT_MARKER.repeat(size);
17
- // Build entity-escaped versions for XML processing
18
- this.localEntity = '<'.repeat(size);
19
- this.otherEntity = '>'.repeat(size);
20
- // Build regex pattern for indent correction
21
- // Matches any of the conflict markers at start of content
22
- const escapedMarkers = [
23
- this.escapeRegex(this.localMarker),
24
- this.escapeRegex(this.ancestorMarker),
25
- this.escapeRegex(this.separator),
26
- this.escapeRegex(this.otherMarker),
27
- ].join('|');
28
- this.indentRegex = new RegExp(`[ \\t]+(${escapedMarkers})`, 'g');
29
- }
30
- correctConflictIndent(xml) {
31
- return xml.replace(this.indentRegex, '$1').replace(/^[ \t]*[\n\r]+/gm, '');
32
- }
33
- handleSpecialEntities(xml) {
34
- return xml
35
- .replaceAll(' ', ' ')
36
- .replaceAll(this.localEntity, this.localMarker)
37
- .replaceAll(this.otherEntity, this.otherMarker);
38
- }
39
- escapeRegex(str) {
40
- return str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
41
- }
42
- }
43
- //# sourceMappingURL=ConflictMarkerFormatter.js.map
@@ -1 +0,0 @@
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,17 +0,0 @@
1
- import type { MergeConfig } from '../types/conflictTypes.js';
2
- import type { JsonValue } from '../types/jsonTypes.js';
3
- import type { MergeNodeFactory } from './nodes/MergeNodeFactory.js';
4
- export interface RootKeyInfo {
5
- readonly name: string;
6
- readonly existsInLocal: boolean;
7
- readonly existsInOther: boolean;
8
- }
9
- export interface MergeContext {
10
- readonly config: MergeConfig;
11
- readonly ancestor: JsonValue;
12
- readonly local: JsonValue;
13
- readonly other: JsonValue;
14
- readonly attribute: string | undefined;
15
- readonly nodeFactory: MergeNodeFactory;
16
- readonly rootKey: RootKeyInfo | undefined;
17
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=MergeContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MergeContext.js","sourceRoot":"","sources":["../../src/merger/MergeContext.ts"],"names":[],"mappings":""}
@@ -1,13 +0,0 @@
1
- import type { MergeConfig } from '../types/conflictTypes.js';
2
- import type { JsonArray, JsonObject, JsonValue } from '../types/jsonTypes.js';
3
- import type { MergeResult } from '../types/mergeResult.js';
4
- import type { RootKeyInfo } from './MergeContext.js';
5
- import { type MergeNodeFactory } from './nodes/MergeNodeFactory.js';
6
- export declare class MergeOrchestrator {
7
- private readonly config;
8
- private readonly nodeFactory;
9
- constructor(config: MergeConfig, nodeFactory?: MergeNodeFactory);
10
- merge(ancestor: JsonValue, local: JsonValue, other: JsonValue, attribute?: string, rootKey?: RootKeyInfo): MergeResult;
11
- private buildEarlyResult;
12
- mergeObject(ancestor: JsonObject | JsonArray, local: JsonObject | JsonArray, other: JsonObject | JsonArray): MergeResult;
13
- }
@@ -1,46 +0,0 @@
1
- import { deepEqual } from 'fast-equals';
2
- import { noConflict } from '../types/mergeResult.js';
3
- import { MergeScenario } from '../types/mergeScenario.js';
4
- import { getScenario } from './MergeScenarioFactory.js';
5
- import { defaultNodeFactory, } from './nodes/MergeNodeFactory.js';
6
- import { toJsonArray } from './nodes/nodeUtils.js';
7
- import { getScenarioStrategy } from './strategies/ScenarioStrategyFactory.js';
8
- export class MergeOrchestrator {
9
- config;
10
- nodeFactory;
11
- constructor(config, nodeFactory = defaultNodeFactory) {
12
- this.config = config;
13
- this.nodeFactory = nodeFactory;
14
- }
15
- merge(ancestor, local, other, attribute, rootKey) {
16
- const scenario = getScenario(ancestor, local, other);
17
- // Early termination: if all three are equal, skip merge
18
- if (scenario === MergeScenario.ALL) {
19
- if (deepEqual(ancestor, local) && deepEqual(local, other)) {
20
- return this.buildEarlyResult(local, rootKey);
21
- }
22
- }
23
- const strategy = getScenarioStrategy(scenario);
24
- const context = {
25
- config: this.config,
26
- ancestor,
27
- local,
28
- other,
29
- attribute,
30
- nodeFactory: this.nodeFactory,
31
- rootKey,
32
- };
33
- return strategy.execute(context);
34
- }
35
- buildEarlyResult(value, rootKey) {
36
- const content = toJsonArray(value);
37
- if (rootKey) {
38
- return noConflict([{ [rootKey.name]: content }]);
39
- }
40
- return noConflict(content);
41
- }
42
- mergeObject(ancestor, local, other) {
43
- return this.merge(ancestor, local, other);
44
- }
45
- }
46
- //# sourceMappingURL=MergeOrchestrator.js.map
@@ -1 +0,0 @@
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,2 +0,0 @@
1
- import { MergeScenario } from '../types/mergeScenario.js';
2
- export declare const getScenario: (ancestor: any, local: any, other: any) => MergeScenario;
@@ -1,22 +0,0 @@
1
- import { isEmpty } from 'lodash-es';
2
- import { MergeScenario } from '../types/mergeScenario.js';
3
- export const getScenario = (
4
- // biome-ignore lint/suspicious/noExplicitAny: can be any metadata in json format
5
- ancestor,
6
- // biome-ignore lint/suspicious/noExplicitAny: can be any metadata in json format
7
- local,
8
- // biome-ignore lint/suspicious/noExplicitAny: can be any metadata in json format
9
- other) => {
10
- let scenario = MergeScenario.NONE;
11
- if (!isEmpty(ancestor)) {
12
- scenario += 100;
13
- }
14
- if (!isEmpty(local)) {
15
- scenario += 10;
16
- }
17
- if (!isEmpty(other)) {
18
- scenario += 1;
19
- }
20
- return scenario;
21
- };
22
- //# sourceMappingURL=MergeScenarioFactory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MergeScenarioFactory.js","sourceRoot":"","sources":["../../src/merger/MergeScenarioFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG;AACzB,iFAAiF;AACjF,QAAa;AACb,iFAAiF;AACjF,KAAU;AACV,iFAAiF;AACjF,KAAU,EACK,EAAE;IACjB,IAAI,QAAQ,GAAkB,aAAa,CAAC,IAAI,CAAA;IAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,QAAQ,IAAI,GAAG,CAAA;IACjB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,QAAQ,IAAI,EAAE,CAAA;IAChB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,QAAQ,IAAI,CAAC,CAAA;IACf,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -1,12 +0,0 @@
1
- import type { MergeConfig } from '../../types/conflictTypes.js';
2
- import type { JsonArray } from '../../types/jsonTypes.js';
3
- import type { MergeResult } from '../../types/mergeResult.js';
4
- import type { MergeNode } from './MergeNode.js';
5
- export declare class KeyedArrayMergeNode implements MergeNode {
6
- private readonly ancestor;
7
- private readonly local;
8
- private readonly other;
9
- private readonly attribute;
10
- constructor(ancestor: JsonArray, local: JsonArray, other: JsonArray, attribute: string);
11
- merge(config: MergeConfig): MergeResult;
12
- }
@@ -1,67 +0,0 @@
1
- import { MetadataService } from '../../service/MetadataService.js';
2
- import { combineResults, withConflict } from '../../types/mergeResult.js';
3
- import { buildConflictMarkers } from '../ConflictMarkerBuilder.js';
4
- import { MergeOrchestrator } from '../MergeOrchestrator.js';
5
- import { defaultNodeFactory } from './MergeNodeFactory.js';
6
- import { toJsonArray } from './nodeUtils.js';
7
- // Build a Map from array using key extractor, collecting keys into provided Set
8
- const buildKeyedMap = (arr, keyField, keysSet) => {
9
- const map = new Map();
10
- for (const item of arr) {
11
- const key = keyField(item);
12
- map.set(key, item);
13
- keysSet.add(key);
14
- }
15
- return map;
16
- };
17
- export class KeyedArrayMergeNode {
18
- ancestor;
19
- local;
20
- other;
21
- attribute;
22
- constructor(ancestor, local, other, attribute) {
23
- this.ancestor = ancestor;
24
- this.local = local;
25
- this.other = other;
26
- this.attribute = attribute;
27
- }
28
- merge(config) {
29
- const keyField = MetadataService.getKeyFieldExtractor(this.attribute);
30
- if (!keyField) {
31
- const localContent = toJsonArray({ [this.attribute]: this.local });
32
- const ancestorContent = toJsonArray({ [this.attribute]: this.ancestor });
33
- const otherContent = toJsonArray({ [this.attribute]: this.other });
34
- const localObj = (localContent.length === 1 ? localContent[0] : localContent);
35
- const ancestorObj = (ancestorContent.length === 1 ? ancestorContent[0] : ancestorContent);
36
- const otherObj = (otherContent.length === 1 ? otherContent[0] : otherContent);
37
- return withConflict(buildConflictMarkers(config, localObj, ancestorObj, otherObj));
38
- }
39
- // Build maps and collect unique keys in a single pass per array
40
- const allKeys = new Set();
41
- const keyedAncestor = buildKeyedMap(this.ancestor, keyField, allKeys);
42
- const keyedLocal = buildKeyedMap(this.local, keyField, allKeys);
43
- const keyedOther = buildKeyedMap(this.other, keyField, allKeys);
44
- // Sort keys once
45
- const sortedKeys = Array.from(allKeys).sort();
46
- const results = [];
47
- const orchestrator = new MergeOrchestrator(config, defaultNodeFactory);
48
- for (const key of sortedKeys) {
49
- const ancestorOfKey = keyedAncestor.get(key);
50
- const localOfKey = keyedLocal.get(key);
51
- const otherOfKey = keyedOther.get(key);
52
- const result = orchestrator.merge(ancestorOfKey ?? {}, localOfKey ?? {}, otherOfKey ?? {}, this.attribute);
53
- // istanbul ignore else -- defensive: all current conflict strategies return non-empty output
54
- if (result.output.length > 0) {
55
- results.push({
56
- output: [{ [this.attribute]: result.output }],
57
- hasConflict: result.hasConflict,
58
- });
59
- }
60
- else if (result.hasConflict) {
61
- results.push(result);
62
- }
63
- }
64
- return combineResults(results);
65
- }
66
- }
67
- //# sourceMappingURL=KeyedArrayMergeNode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KeyedArrayMergeNode.js","sourceRoot":"","sources":["../../../src/merger/nodes/KeyedArrayMergeNode.ts"],"names":[],"mappings":"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"}