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
@@ -1,5 +0,0 @@
1
- import type { MergeConfig } from '../../types/conflictTypes.js';
2
- import type { MergeResult } from '../../types/mergeResult.js';
3
- export interface MergeNode {
4
- merge(config: MergeConfig): MergeResult;
5
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=MergeNode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MergeNode.js","sourceRoot":"","sources":["../../../src/merger/nodes/MergeNode.ts"],"names":[],"mappings":""}
@@ -1,9 +0,0 @@
1
- import type { JsonValue } from '../../types/jsonTypes.js';
2
- import type { MergeNode } from './MergeNode.js';
3
- export interface MergeNodeFactory {
4
- createNode(ancestor: JsonValue, local: JsonValue, other: JsonValue, attribute: string): MergeNode;
5
- }
6
- export declare class DefaultMergeNodeFactory implements MergeNodeFactory {
7
- createNode(ancestor: JsonValue, local: JsonValue, other: JsonValue, attribute: string): MergeNode;
8
- }
9
- export declare const defaultNodeFactory: DefaultMergeNodeFactory;
@@ -1,21 +0,0 @@
1
- import { every, isArray, isString, isObject as lodashIsObject, some, } from 'lodash-es';
2
- import { KeyedArrayMergeNode } from './KeyedArrayMergeNode.js';
3
- import { ensureArray } from './nodeUtils.js';
4
- import { TextArrayMergeNode } from './TextArrayMergeNode.js';
5
- import { TextMergeNode } from './TextMergeNode.js';
6
- const hasObject = (...values) => some(values, lodashIsObject);
7
- const hasStringArray = (...values) => some(values, value => isArray(value) && every(value, isString));
8
- export class DefaultMergeNodeFactory {
9
- createNode(ancestor, local, other, attribute) {
10
- const [ancestorArr, localArr, otherArr] = [ancestor, local, other].map(ensureArray);
11
- if (hasStringArray(ancestor, local, other)) {
12
- return new TextArrayMergeNode(ancestorArr, localArr, otherArr, attribute);
13
- }
14
- if (hasObject(ancestor, local, other)) {
15
- return new KeyedArrayMergeNode(ancestorArr, localArr, otherArr, attribute);
16
- }
17
- return new TextMergeNode(ancestor, local, other, attribute);
18
- }
19
- }
20
- export const defaultNodeFactory = new DefaultMergeNodeFactory();
21
- //# sourceMappingURL=MergeNodeFactory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MergeNodeFactory.js","sourceRoot":"","sources":["../../../src/merger/nodes/MergeNodeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,IAAI,cAAc,EAC1B,IAAI,GACL,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,SAAS,GAAG,CAAC,GAAG,MAAwC,EAAW,EAAE,CACzE,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAE9B,MAAM,cAAc,GAAG,CAAC,GAAG,MAAwC,EAAW,EAAE,CAC9E,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;AAWjE,MAAM,OAAO,uBAAuB;IAClC,UAAU,CACR,QAAmB,EACnB,KAAgB,EAChB,KAAgB,EAChB,SAAiB;QAEjB,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CACpE,WAAW,CACZ,CAAA;QAED,IAAI,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,kBAAkB,CAC3B,WAAwB,EACxB,QAAqB,EACrB,QAAqB,EACrB,SAAS,CACV,CAAA;QACH,CAAC;QAED,IAAI,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,mBAAmB,CAC5B,WAAwB,EACxB,QAAqB,EACrB,QAAqB,EACrB,SAAS,CACV,CAAA;QACH,CAAC;QAED,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC7D,CAAC;CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,uBAAuB,EAAE,CAAA"}
@@ -1,20 +0,0 @@
1
- import type { MergeConfig } from '../../types/conflictTypes.js';
2
- import type { JsonArray, JsonObject } from '../../types/jsonTypes.js';
3
- import type { MergeResult } from '../../types/mergeResult.js';
4
- import type { MergeContext } from '../MergeContext.js';
5
- import type { MergeNode } from './MergeNode.js';
6
- export declare class ObjectMergeNode implements MergeNode {
7
- private readonly ancestor;
8
- private readonly local;
9
- private readonly other;
10
- constructor(ancestor: JsonObject | JsonArray, local: JsonObject | JsonArray, other: JsonObject | JsonArray);
11
- merge(config: MergeConfig): MergeResult;
12
- }
13
- export declare class NestedObjectMergeNode implements MergeNode {
14
- private readonly ancestor;
15
- private readonly local;
16
- private readonly other;
17
- constructor(ancestor: JsonObject | JsonArray, local: JsonObject | JsonArray, other: JsonObject | JsonArray);
18
- merge(config: MergeConfig): MergeResult;
19
- mergeWithContext(context: MergeContext): MergeResult;
20
- }
@@ -1,49 +0,0 @@
1
- import { combineResults } from '../../types/mergeResult.js';
2
- import { MergeOrchestrator } from '../MergeOrchestrator.js';
3
- import { defaultNodeFactory } from './MergeNodeFactory.js';
4
- import { getUniqueSortedProps } from './nodeUtils.js';
5
- export class ObjectMergeNode {
6
- ancestor;
7
- local;
8
- other;
9
- constructor(ancestor, local, other) {
10
- this.ancestor = ancestor;
11
- this.local = local;
12
- this.other = other;
13
- }
14
- merge(config) {
15
- const props = getUniqueSortedProps(this.ancestor, this.local, this.other);
16
- const results = [];
17
- for (const key of props) {
18
- const ancestorOfKey = this.ancestor[key];
19
- const localOfKey = this.local[key];
20
- const otherOfKey = this.other[key];
21
- const childNode = defaultNodeFactory.createNode(ancestorOfKey, localOfKey, otherOfKey, key);
22
- const childResult = childNode.merge(config);
23
- results.push({
24
- output: childResult.output.map(item => ({ [key]: item })),
25
- hasConflict: childResult.hasConflict,
26
- });
27
- }
28
- return combineResults(results);
29
- }
30
- }
31
- export class NestedObjectMergeNode {
32
- ancestor;
33
- local;
34
- other;
35
- constructor(ancestor, local, other) {
36
- this.ancestor = ancestor;
37
- this.local = local;
38
- this.other = other;
39
- }
40
- merge(config) {
41
- const orchestrator = new MergeOrchestrator(config, defaultNodeFactory);
42
- return orchestrator.mergeObject(this.ancestor, this.local, this.other);
43
- }
44
- mergeWithContext(context) {
45
- const orchestrator = new MergeOrchestrator(context.config, context.nodeFactory);
46
- return orchestrator.mergeObject(this.ancestor, this.local, this.other);
47
- }
48
- }
49
- //# sourceMappingURL=ObjectMergeNode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObjectMergeNode.js","sourceRoot":"","sources":["../../../src/merger/nodes/ObjectMergeNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAErD,MAAM,OAAO,eAAe;IAEP;IACA;IACA;IAHnB,YACmB,QAAgC,EAChC,KAA6B,EAC7B,KAA6B;QAF7B,aAAQ,GAAR,QAAQ,CAAwB;QAChC,UAAK,GAAL,KAAK,CAAwB;QAC7B,UAAK,GAAL,KAAK,CAAwB;IAC7C,CAAC;IAEJ,KAAK,CAAC,MAAmB;QACvB,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACzE,MAAM,OAAO,GAAkB,EAAE,CAAA;QAEjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAElC,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAC7C,aAAa,EACb,UAAU,EACV,UAAU,EACV,GAAG,CACJ,CAAA;YACD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAE3C,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,WAAW,EAAE,WAAW,CAAC,WAAW;aACrC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IAEb;IACA;IACA;IAHnB,YACmB,QAAgC,EAChC,KAA6B,EAC7B,KAA6B;QAF7B,aAAQ,GAAR,QAAQ,CAAwB;QAChC,UAAK,GAAL,KAAK,CAAwB;QAC7B,UAAK,GAAL,KAAK,CAAwB;IAC7C,CAAC;IAEJ,KAAK,CAAC,MAAmB;QACvB,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;QACtE,OAAO,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACxE,CAAC;IAED,gBAAgB,CAAC,OAAqB;QACpC,MAAM,YAAY,GAAG,IAAI,iBAAiB,CACxC,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,WAAW,CACpB,CAAA;QACD,OAAO,YAAY,CAAC,WAAW,CAC7B,IAAI,CAAC,QAAkC,EACvC,IAAI,CAAC,KAA+B,EACpC,IAAI,CAAC,KAA+B,CACrC,CAAA;IACH,CAAC;CACF"}
@@ -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 TextArrayMergeNode 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,66 +0,0 @@
1
- import { isNil } from 'lodash-es';
2
- import { TEXT_TAG } from '../../constant/parserConstant.js';
3
- 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
8
- const compareItems = (a, b) => {
9
- const strA = String(a);
10
- const strB = String(b);
11
- if (strA < strB)
12
- return -1;
13
- if (strA > strB)
14
- return 1;
15
- return 0;
16
- };
17
- export class TextArrayMergeNode {
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 localSet = new Set(this.local);
30
- 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
- const resultItems = [];
36
- const seen = new Set();
37
- for (const item of this.ancestor) {
38
- if (seen.has(item))
39
- continue;
40
- seen.add(item);
41
- // Keep if present in both local and other (not removed by either)
42
- if (localSet.has(item) && otherSet.has(item)) {
43
- resultItems.push(item);
44
- }
45
- }
46
- // Items from local not yet seen are new additions (not in ancestor)
47
- for (const item of this.local) {
48
- if (seen.has(item))
49
- continue;
50
- seen.add(item);
51
- resultItems.push(item);
52
- }
53
- // Items from other not yet seen are new additions (not in ancestor)
54
- for (const item of this.other) {
55
- if (seen.has(item))
56
- continue;
57
- seen.add(item);
58
- resultItems.push(item);
59
- }
60
- // Sort and transform in single pass using reduce
61
- resultItems.sort(compareItems);
62
- const merged = resultItems.map(item => generateObj(item, this.attribute));
63
- return noConflict(merged);
64
- }
65
- }
66
- //# sourceMappingURL=TextArrayMergeNode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextArrayMergeNode.js","sourceRoot":"","sources":["../../../src/merger/nodes/TextArrayMergeNode.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { MergeConfig } from '../../types/conflictTypes.js';
2
- import type { JsonValue } from '../../types/jsonTypes.js';
3
- import type { MergeResult } from '../../types/mergeResult.js';
4
- import type { MergeNode } from './MergeNode.js';
5
- export declare class TextMergeNode implements MergeNode {
6
- private readonly ancestor;
7
- private readonly local;
8
- private readonly other;
9
- private readonly attribute;
10
- constructor(ancestor: JsonValue | null, local: JsonValue | null, other: JsonValue | null, attribute: string);
11
- merge(config: MergeConfig): MergeResult;
12
- }
@@ -1,36 +0,0 @@
1
- import { isNil } from 'lodash-es';
2
- import { TEXT_TAG } from '../../constant/parserConstant.js';
3
- import { noConflict } from '../../types/mergeResult.js';
4
- import { MergeScenario } from '../../types/mergeScenario.js';
5
- import { getScenario } from '../MergeScenarioFactory.js';
6
- import { getTextMergeStrategy } from '../strategies/TextMergeStrategy.js';
7
- const generateObj = (value, attrib) => {
8
- return isNil(value) ? {} : { [attrib]: [{ [TEXT_TAG]: value }] };
9
- };
10
- export class TextMergeNode {
11
- ancestor;
12
- local;
13
- other;
14
- attribute;
15
- constructor(ancestor, local, other, attribute) {
16
- this.ancestor = ancestor;
17
- this.local = local;
18
- this.other = other;
19
- this.attribute = attribute;
20
- }
21
- merge(config) {
22
- const objAncestor = generateObj(this.ancestor, this.attribute);
23
- const objLocal = generateObj(this.local, this.attribute);
24
- const objOther = generateObj(this.other, this.attribute);
25
- const scenario = getScenario(objAncestor, objLocal, objOther);
26
- // Early return for identical values - use strict equality for primitives
27
- if (this.local === this.other &&
28
- (scenario === MergeScenario.LOCAL_AND_OTHER ||
29
- scenario === MergeScenario.ALL)) {
30
- return noConflict([objLocal]);
31
- }
32
- const strategy = getTextMergeStrategy(scenario);
33
- return strategy.handle(config, objAncestor, objLocal, objOther, this.ancestor, this.local, this.other);
34
- }
35
- }
36
- //# sourceMappingURL=TextMergeNode.js.map
@@ -1 +0,0 @@
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,5 +0,0 @@
1
- import type { JsonArray, JsonObject, JsonValue } from '../../types/jsonTypes.js';
2
- export declare const ensureArray: (value: JsonValue) => JsonArray;
3
- export declare const getUniqueSortedProps: (...objects: (JsonObject | JsonArray)[]) => string[];
4
- export declare const generateObj: (value: JsonValue | null, attrib: string) => JsonObject;
5
- export declare const toJsonArray: (inputObj: JsonObject | JsonArray) => JsonArray;
@@ -1,20 +0,0 @@
1
- import { castArray, flatMap, flow, isNil, isObject, reject, sortBy, uniq, } from 'lodash-es';
2
- import { TEXT_TAG } from '../../constant/parserConstant.js';
3
- export const ensureArray = (value) => isNil(value) ? [] : castArray(value);
4
- const extractSortedKeys = flow((objects) => reject(objects, isNil), objects => flatMap(objects, Object.keys), uniq, sortBy);
5
- export const getUniqueSortedProps = (...objects) => extractSortedKeys(objects);
6
- export const generateObj = (value, attrib) => (isNil(value) ? {} : { [attrib]: [{ [TEXT_TAG]: value }] });
7
- export const toJsonArray = (inputObj) => flatMap(getUniqueSortedProps(inputObj), attribute => {
8
- const inputObjOfAttr = inputObj[attribute];
9
- if (isObject(inputObjOfAttr)) {
10
- const inputObjArr = ensureArray(inputObjOfAttr);
11
- return flatMap(getUniqueSortedProps(inputObjArr), key => {
12
- const value = inputObjArr[key];
13
- return isObject(value)
14
- ? { [attribute]: toJsonArray(value) }
15
- : generateObj(value, attribute);
16
- });
17
- }
18
- return generateObj(inputObjOfAttr, attribute);
19
- });
20
- //# sourceMappingURL=nodeUtils.js.map
@@ -1 +0,0 @@
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,7 +0,0 @@
1
- import type { MergeResult } from '../../types/mergeResult.js';
2
- import type { MergeContext } from '../MergeContext.js';
3
- import type { ScenarioStrategy } from './ScenarioStrategy.js';
4
- export declare class AllPresentStrategy implements ScenarioStrategy {
5
- execute(context: MergeContext): MergeResult;
6
- private mergeChildren;
7
- }
@@ -1,36 +0,0 @@
1
- import { combineResults } from '../../types/mergeResult.js';
2
- import { getUniqueSortedProps } from '../nodes/nodeUtils.js';
3
- export class AllPresentStrategy {
4
- execute(context) {
5
- const result = this.mergeChildren(context);
6
- // Root level: wrap result with key
7
- if (context.rootKey) {
8
- if (result.output.length > 0) {
9
- return {
10
- output: [{ [context.rootKey.name]: result.output }],
11
- hasConflict: result.hasConflict,
12
- };
13
- }
14
- // Empty result but key exists - preserve empty key
15
- return {
16
- output: [{ [context.rootKey.name]: [] }],
17
- hasConflict: result.hasConflict,
18
- };
19
- }
20
- return result;
21
- }
22
- mergeChildren(context) {
23
- const ancestor = context.ancestor;
24
- const local = context.local;
25
- const other = context.other;
26
- const props = getUniqueSortedProps(ancestor, local, other);
27
- const results = [];
28
- for (const key of props) {
29
- const childNode = context.nodeFactory.createNode(ancestor[key], local[key], other[key], key);
30
- const childResult = childNode.merge(context.config);
31
- results.push(childResult);
32
- }
33
- return combineResults(results);
34
- }
35
- }
36
- //# sourceMappingURL=AllPresentStrategy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AllPresentStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AllPresentStrategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAG5D,MAAM,OAAO,kBAAkB;IAC7B,OAAO,CAAC,OAAqB;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAE1C,mCAAmC;QACnC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO;oBACL,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnD,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAA;YACH,CAAC;YACD,mDAAmD;YACnD,OAAO;gBACL,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;gBACxC,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAA;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,aAAa,CAAC,OAAqB;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAkC,CAAA;QAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAkB,EAAE,CAAA;QAEjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAC9C,QAAQ,CAAC,GAAG,CAAC,EACb,KAAK,CAAC,GAAG,CAAC,EACV,KAAK,CAAC,GAAG,CAAC,EACV,GAAG,CACJ,CAAA;YACD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACnD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3B,CAAC;QAED,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;CACF"}
@@ -1,8 +0,0 @@
1
- import type { MergeResult } from '../../types/mergeResult.js';
2
- import type { MergeContext } from '../MergeContext.js';
3
- import type { ScenarioStrategy } from './ScenarioStrategy.js';
4
- export declare class AncestorAndLocalStrategy implements ScenarioStrategy {
5
- execute(context: MergeContext): MergeResult;
6
- private executeNested;
7
- private executeWithAttribute;
8
- }
@@ -1,64 +0,0 @@
1
- import { deepEqual } from 'fast-equals';
2
- import { noConflict, withConflict } from '../../types/mergeResult.js';
3
- import { buildConflictMarkers } from '../ConflictMarkerBuilder.js';
4
- import { MergeOrchestrator } from '../MergeOrchestrator.js';
5
- import { toJsonArray } from '../nodes/nodeUtils.js';
6
- const extractContent = (arr) => {
7
- return (arr.length === 1 ? arr[0] : arr);
8
- };
9
- export class AncestorAndLocalStrategy {
10
- execute(context) {
11
- const localUnchanged = deepEqual(context.ancestor, context.local);
12
- // Root level handling
13
- if (context.rootKey) {
14
- const { name, existsInOther } = context.rootKey;
15
- // Other key missing and local unchanged = other deletion wins
16
- if (!existsInOther && localUnchanged) {
17
- return noConflict([]);
18
- }
19
- // Other key missing and local changed = conflict at root level
20
- if (!existsInOther && !localUnchanged) {
21
- const localObj = {
22
- [name]: toJsonArray(context.local),
23
- };
24
- const ancestorObj = {
25
- [name]: toJsonArray(context.ancestor),
26
- };
27
- return withConflict(buildConflictMarkers(context.config, localObj, ancestorObj, {}));
28
- }
29
- // Other key exists with empty value - delegate to nested merge, wrap result
30
- const result = this.executeNested(context);
31
- if (result.output.length > 0) {
32
- return {
33
- output: [{ [name]: result.output }],
34
- hasConflict: result.hasConflict,
35
- };
36
- }
37
- // Empty result but key exists - preserve empty key
38
- return noConflict([{ [name]: [] }]);
39
- }
40
- // Nested level: local unchanged means return empty (other deleted)
41
- if (localUnchanged) {
42
- return noConflict([]);
43
- }
44
- // Nested level with attribute (keyed array element)
45
- if (context.attribute) {
46
- return this.executeWithAttribute(context);
47
- }
48
- // Nested level conflict
49
- return withConflict(buildConflictMarkers(context.config, extractContent(toJsonArray(context.local)), extractContent(toJsonArray(context.ancestor)), {}));
50
- }
51
- executeNested(context) {
52
- const orchestrator = new MergeOrchestrator(context.config, context.nodeFactory);
53
- return orchestrator.merge(context.ancestor, context.local, context.other);
54
- }
55
- executeWithAttribute(context) {
56
- const orchestrator = new MergeOrchestrator(context.config, context.nodeFactory);
57
- const localResult = orchestrator.merge({}, context.local, {}, undefined);
58
- const ancestorResult = orchestrator.merge({}, context.ancestor, {}, undefined);
59
- const localProp = { [context.attribute]: localResult.output };
60
- const ancestorProp = { [context.attribute]: ancestorResult.output };
61
- return withConflict(buildConflictMarkers(context.config, localProp, ancestorProp, {}));
62
- }
63
- }
64
- //# sourceMappingURL=AncestorAndLocalStrategy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AncestorAndLocalStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorAndLocalStrategy.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { MergeResult } from '../../types/mergeResult.js';
2
- import type { MergeContext } from '../MergeContext.js';
3
- import type { ScenarioStrategy } from './ScenarioStrategy.js';
4
- export declare class AncestorAndOtherStrategy implements ScenarioStrategy {
5
- execute(context: MergeContext): MergeResult;
6
- private executeNested;
7
- private executeWithAttribute;
8
- }
@@ -1,64 +0,0 @@
1
- import { deepEqual } from 'fast-equals';
2
- import { noConflict, withConflict } from '../../types/mergeResult.js';
3
- import { buildConflictMarkers } from '../ConflictMarkerBuilder.js';
4
- import { MergeOrchestrator } from '../MergeOrchestrator.js';
5
- import { toJsonArray } from '../nodes/nodeUtils.js';
6
- const extractContent = (arr) => {
7
- return (arr.length === 1 ? arr[0] : arr);
8
- };
9
- export class AncestorAndOtherStrategy {
10
- execute(context) {
11
- const otherUnchanged = deepEqual(context.ancestor, context.other);
12
- // Root level handling
13
- if (context.rootKey) {
14
- const { name, existsInLocal } = context.rootKey;
15
- // Local key missing and other unchanged = local deletion wins
16
- if (!existsInLocal && otherUnchanged) {
17
- return noConflict([]);
18
- }
19
- // Local key missing and other changed = conflict at root level
20
- if (!existsInLocal && !otherUnchanged) {
21
- const ancestorObj = {
22
- [name]: toJsonArray(context.ancestor),
23
- };
24
- const otherObj = {
25
- [name]: toJsonArray(context.other),
26
- };
27
- return withConflict(buildConflictMarkers(context.config, {}, ancestorObj, otherObj));
28
- }
29
- // Local key exists with empty value - delegate to nested merge, wrap result
30
- const result = this.executeNested(context);
31
- if (result.output.length > 0) {
32
- return {
33
- output: [{ [name]: result.output }],
34
- hasConflict: result.hasConflict,
35
- };
36
- }
37
- // Empty result but key exists - preserve empty key
38
- return noConflict([{ [name]: [] }]);
39
- }
40
- // Nested level: other unchanged means return empty (local deleted)
41
- if (otherUnchanged) {
42
- return noConflict([]);
43
- }
44
- // Nested level with attribute (keyed array element)
45
- if (context.attribute) {
46
- return this.executeWithAttribute(context);
47
- }
48
- // Nested level conflict
49
- return withConflict(buildConflictMarkers(context.config, {}, extractContent(toJsonArray(context.ancestor)), extractContent(toJsonArray(context.other))));
50
- }
51
- executeNested(context) {
52
- const orchestrator = new MergeOrchestrator(context.config, context.nodeFactory);
53
- return orchestrator.merge(context.ancestor, context.local, context.other);
54
- }
55
- executeWithAttribute(context) {
56
- const orchestrator = new MergeOrchestrator(context.config, context.nodeFactory);
57
- const ancestorResult = orchestrator.merge({}, context.ancestor, {}, undefined);
58
- const otherResult = orchestrator.merge({}, {}, context.other, undefined);
59
- const ancestorProp = { [context.attribute]: ancestorResult.output };
60
- const otherProp = { [context.attribute]: otherResult.output };
61
- return withConflict(buildConflictMarkers(context.config, {}, ancestorProp, otherProp));
62
- }
63
- }
64
- //# sourceMappingURL=AncestorAndOtherStrategy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AncestorAndOtherStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/AncestorAndOtherStrategy.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { MergeResult } from '../../types/mergeResult.js';
2
- import type { MergeContext } from '../MergeContext.js';
3
- import type { ScenarioStrategy } from './ScenarioStrategy.js';
4
- export declare class AncestorOnlyStrategy implements ScenarioStrategy {
5
- execute(context: MergeContext): MergeResult;
6
- }
@@ -1,19 +0,0 @@
1
- import { noConflict } from '../../types/mergeResult.js';
2
- export class AncestorOnlyStrategy {
3
- execute(context) {
4
- // ANCESTOR_ONLY: deleted in both local and other
5
- // Root level: check if key should exist in result
6
- if (context.rootKey) {
7
- const { name, existsInLocal, existsInOther } = context.rootKey;
8
- if (existsInLocal || existsInOther) {
9
- // Key exists with empty value - preserve empty key
10
- return noConflict([{ [name]: [] }]);
11
- }
12
- // Key completely deleted - return nothing
13
- return noConflict([]);
14
- }
15
- // Nested level: return empty (deleted)
16
- return noConflict([]);
17
- }
18
- }
19
- //# sourceMappingURL=AncestorOnlyStrategy.js.map
@@ -1 +0,0 @@
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,7 +0,0 @@
1
- import type { MergeResult } from '../../types/mergeResult.js';
2
- import type { MergeContext } from '../MergeContext.js';
3
- import type { ScenarioStrategy } from './ScenarioStrategy.js';
4
- export declare class LocalAndOtherStrategy implements ScenarioStrategy {
5
- execute(context: MergeContext): MergeResult;
6
- private mergeChildren;
7
- }
@@ -1,45 +0,0 @@
1
- import { deepEqual } from 'fast-equals';
2
- import { combineResults, noConflict } from '../../types/mergeResult.js';
3
- import { getUniqueSortedProps, toJsonArray } from '../nodes/nodeUtils.js';
4
- export class LocalAndOtherStrategy {
5
- execute(context) {
6
- const local = context.local;
7
- const other = context.other;
8
- // If identical, return other
9
- if (deepEqual(local, other)) {
10
- const content = toJsonArray(other);
11
- // Root level: wrap with key
12
- if (context.rootKey) {
13
- return noConflict([{ [context.rootKey.name]: content }]);
14
- }
15
- return noConflict(content);
16
- }
17
- // Different - merge children
18
- const result = this.mergeChildren(context);
19
- // Root level: wrap result with key
20
- if (context.rootKey) {
21
- if (result.output.length > 0) {
22
- return {
23
- output: [{ [context.rootKey.name]: result.output }],
24
- hasConflict: result.hasConflict,
25
- };
26
- }
27
- // Empty result but keys exist - preserve empty key
28
- return noConflict([{ [context.rootKey.name]: [] }]);
29
- }
30
- return result;
31
- }
32
- mergeChildren(context) {
33
- const local = context.local;
34
- const other = context.other;
35
- const props = getUniqueSortedProps({}, local, other);
36
- const results = [];
37
- for (const key of props) {
38
- const childNode = context.nodeFactory.createNode(undefined, local[key], other[key], key);
39
- const childResult = childNode.merge(context.config);
40
- results.push(childResult);
41
- }
42
- return combineResults(results);
43
- }
44
- }
45
- //# sourceMappingURL=LocalAndOtherStrategy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LocalAndOtherStrategy.js","sourceRoot":"","sources":["../../../src/merger/strategies/LocalAndOtherStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGzE,MAAM,OAAO,qBAAqB;IAChC,OAAO,CAAC,OAAqB;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QAErD,6BAA6B;QAC7B,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;YAElC,4BAA4B;YAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;YAC1D,CAAC;YAED,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;QAED,6BAA6B;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAE1C,mCAAmC;QACnC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO;oBACL,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnD,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAA;YACH,CAAC;YACD,mDAAmD;YACnD,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACrD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,aAAa,CAAC,OAAqB;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+B,CAAA;QACrD,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QACpD,MAAM,OAAO,GAAkB,EAAE,CAAA;QAEjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAC9C,SAAkB,EAClB,KAAK,CAAC,GAAG,CAAC,EACV,KAAK,CAAC,GAAG,CAAC,EACV,GAAG,CACJ,CAAA;YACD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACnD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3B,CAAC;QAED,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;CACF"}
@@ -1,6 +0,0 @@
1
- import type { MergeResult } from '../../types/mergeResult.js';
2
- import type { MergeContext } from '../MergeContext.js';
3
- import type { ScenarioStrategy } from './ScenarioStrategy.js';
4
- export declare class LocalOnlyStrategy implements ScenarioStrategy {
5
- execute(context: MergeContext): MergeResult;
6
- }