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.
- package/README.md +6 -30
- package/lib/commands/git/merge/driver/run.js +5 -3
- package/lib/commands/git/merge/driver/run.js.map +1 -1
- package/lib/constant/conflictConstant.d.ts +3 -3
- package/lib/constant/conflictConstant.js +3 -3
- package/lib/constant/conflictConstant.js.map +1 -1
- package/lib/constant/parserConstant.d.ts +0 -6
- package/lib/constant/parserConstant.js +0 -6
- package/lib/constant/parserConstant.js.map +1 -1
- package/lib/driver/MergeDriver.d.ts +0 -3
- package/lib/driver/MergeDriver.js +1 -5
- package/lib/driver/MergeDriver.js.map +1 -1
- package/lib/merger/JsonMerger.d.ts +0 -3
- package/lib/merger/JsonMerger.js +212 -20
- package/lib/merger/JsonMerger.js.map +1 -1
- package/lib/merger/XmlMerger.d.ts +0 -5
- package/lib/merger/XmlMerger.js +16 -19
- package/lib/merger/XmlMerger.js.map +1 -1
- package/lib/merger/conflictMarker.d.ts +12 -0
- package/lib/merger/conflictMarker.js +48 -0
- package/lib/merger/conflictMarker.js.map +1 -0
- package/lib/merger/textAttribute.d.ts +3 -0
- package/lib/merger/textAttribute.js +56 -0
- package/lib/merger/textAttribute.js.map +1 -0
- package/lib/service/NamespaceHandler.js +2 -1
- package/lib/service/NamespaceHandler.js.map +1 -1
- package/lib/types/conflictTypes.d.ts +1 -1
- package/lib/types/mergeScenario.d.ts +1 -0
- package/lib/types/mergeScenario.js +20 -0
- package/lib/types/mergeScenario.js.map +1 -1
- package/lib/utils/mergeUtils.d.ts +5 -0
- package/lib/utils/mergeUtils.js +14 -0
- package/lib/utils/mergeUtils.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/oclif.manifest.json +4 -4
- package/package.json +2 -2
- package/lib/merger/ConflictMarkerBuilder.d.ts +0 -3
- package/lib/merger/ConflictMarkerBuilder.js +0 -33
- package/lib/merger/ConflictMarkerBuilder.js.map +0 -1
- package/lib/merger/ConflictMarkerFormatter.d.ts +0 -14
- package/lib/merger/ConflictMarkerFormatter.js +0 -43
- package/lib/merger/ConflictMarkerFormatter.js.map +0 -1
- package/lib/merger/MergeContext.d.ts +0 -17
- package/lib/merger/MergeContext.js +0 -2
- package/lib/merger/MergeContext.js.map +0 -1
- package/lib/merger/MergeOrchestrator.d.ts +0 -13
- package/lib/merger/MergeOrchestrator.js +0 -46
- package/lib/merger/MergeOrchestrator.js.map +0 -1
- package/lib/merger/MergeScenarioFactory.d.ts +0 -2
- package/lib/merger/MergeScenarioFactory.js +0 -22
- package/lib/merger/MergeScenarioFactory.js.map +0 -1
- package/lib/merger/nodes/KeyedArrayMergeNode.d.ts +0 -12
- package/lib/merger/nodes/KeyedArrayMergeNode.js +0 -67
- package/lib/merger/nodes/KeyedArrayMergeNode.js.map +0 -1
- package/lib/merger/nodes/MergeNode.d.ts +0 -5
- package/lib/merger/nodes/MergeNode.js +0 -2
- package/lib/merger/nodes/MergeNode.js.map +0 -1
- package/lib/merger/nodes/MergeNodeFactory.d.ts +0 -9
- package/lib/merger/nodes/MergeNodeFactory.js +0 -21
- package/lib/merger/nodes/MergeNodeFactory.js.map +0 -1
- package/lib/merger/nodes/ObjectMergeNode.d.ts +0 -20
- package/lib/merger/nodes/ObjectMergeNode.js +0 -49
- package/lib/merger/nodes/ObjectMergeNode.js.map +0 -1
- package/lib/merger/nodes/TextArrayMergeNode.d.ts +0 -12
- package/lib/merger/nodes/TextArrayMergeNode.js +0 -66
- package/lib/merger/nodes/TextArrayMergeNode.js.map +0 -1
- package/lib/merger/nodes/TextMergeNode.d.ts +0 -12
- package/lib/merger/nodes/TextMergeNode.js +0 -36
- package/lib/merger/nodes/TextMergeNode.js.map +0 -1
- package/lib/merger/nodes/nodeUtils.d.ts +0 -5
- package/lib/merger/nodes/nodeUtils.js +0 -20
- package/lib/merger/nodes/nodeUtils.js.map +0 -1
- package/lib/merger/strategies/AllPresentStrategy.d.ts +0 -7
- package/lib/merger/strategies/AllPresentStrategy.js +0 -36
- package/lib/merger/strategies/AllPresentStrategy.js.map +0 -1
- package/lib/merger/strategies/AncestorAndLocalStrategy.d.ts +0 -8
- package/lib/merger/strategies/AncestorAndLocalStrategy.js +0 -64
- package/lib/merger/strategies/AncestorAndLocalStrategy.js.map +0 -1
- package/lib/merger/strategies/AncestorAndOtherStrategy.d.ts +0 -8
- package/lib/merger/strategies/AncestorAndOtherStrategy.js +0 -64
- package/lib/merger/strategies/AncestorAndOtherStrategy.js.map +0 -1
- package/lib/merger/strategies/AncestorOnlyStrategy.d.ts +0 -6
- package/lib/merger/strategies/AncestorOnlyStrategy.js +0 -19
- package/lib/merger/strategies/AncestorOnlyStrategy.js.map +0 -1
- package/lib/merger/strategies/LocalAndOtherStrategy.d.ts +0 -7
- package/lib/merger/strategies/LocalAndOtherStrategy.js +0 -45
- package/lib/merger/strategies/LocalAndOtherStrategy.js.map +0 -1
- package/lib/merger/strategies/LocalOnlyStrategy.d.ts +0 -6
- package/lib/merger/strategies/LocalOnlyStrategy.js +0 -14
- package/lib/merger/strategies/LocalOnlyStrategy.js.map +0 -1
- package/lib/merger/strategies/NoneStrategy.d.ts +0 -6
- package/lib/merger/strategies/NoneStrategy.js +0 -8
- package/lib/merger/strategies/NoneStrategy.js.map +0 -1
- package/lib/merger/strategies/OtherOnlyStrategy.d.ts +0 -6
- package/lib/merger/strategies/OtherOnlyStrategy.js +0 -14
- package/lib/merger/strategies/OtherOnlyStrategy.js.map +0 -1
- package/lib/merger/strategies/ScenarioStrategy.d.ts +0 -5
- package/lib/merger/strategies/ScenarioStrategy.js +0 -2
- package/lib/merger/strategies/ScenarioStrategy.js.map +0 -1
- package/lib/merger/strategies/ScenarioStrategyFactory.d.ts +0 -3
- package/lib/merger/strategies/ScenarioStrategyFactory.js +0 -23
- package/lib/merger/strategies/ScenarioStrategyFactory.js.map +0 -1
- package/lib/merger/strategies/TextMergeStrategy.d.ts +0 -32
- package/lib/merger/strategies/TextMergeStrategy.js +0 -80
- package/lib/merger/strategies/TextMergeStrategy.js.map +0 -1
- package/lib/types/mergeResult.d.ts +0 -8
- package/lib/types/mergeResult.js +0 -33
- package/lib/types/mergeResult.js.map +0 -1
package/README.md
CHANGED
|
@@ -36,30 +36,6 @@ sequenceDiagram
|
|
|
36
36
|
Git->>Dev: Clean commit (no conflicts)
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
## Conflict Style
|
|
40
|
-
|
|
41
|
-
This merge driver follows the **zdiff3** conflict style philosophy:
|
|
42
|
-
|
|
43
|
-
- **Shows the most compact diff possible**: Only the specific conflicting elements are marked, not entire file sections
|
|
44
|
-
- **Includes ancestor context**: Conflicts display the base (ancestor) version alongside local and remote changes
|
|
45
|
-
- **Respects Git configuration**: Conflict marker size and labels are configurable via Git's standard parameters (`-L`, `-S`, `-X`, `-Y` flags)
|
|
46
|
-
|
|
47
|
-
Example conflict output:
|
|
48
|
-
```xml
|
|
49
|
-
<<<<<<< ours
|
|
50
|
-
<field>localValue</field>
|
|
51
|
-
||||||| base
|
|
52
|
-
<field>originalValue</field>
|
|
53
|
-
=======
|
|
54
|
-
<field>remoteValue</field>
|
|
55
|
-
>>>>>>> theirs
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
This approach helps you understand:
|
|
59
|
-
1. What the original value was (`base`)
|
|
60
|
-
2. What your branch changed it to (`ours`)
|
|
61
|
-
3. What the other branch changed it to (`theirs`)
|
|
62
|
-
|
|
63
39
|
## Installation (30 seconds)
|
|
64
40
|
|
|
65
41
|
```bash
|
|
@@ -279,7 +255,7 @@ EXAMPLES
|
|
|
279
255
|
$ sf git merge driver install
|
|
280
256
|
```
|
|
281
257
|
|
|
282
|
-
_See code: [src/commands/git/merge/driver/install.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0
|
|
258
|
+
_See code: [src/commands/git/merge/driver/install.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0/src/commands/git/merge/driver/install.ts)_
|
|
283
259
|
|
|
284
260
|
## `sf git merge driver run`
|
|
285
261
|
|
|
@@ -296,9 +272,9 @@ FLAGS
|
|
|
296
272
|
-L, --conflict-marker-size=<value> [default: 7] number of characters to show for conflict markers
|
|
297
273
|
-O, --ancestor-file=<value> (required) path to the common ancestor version of the file
|
|
298
274
|
-P, --output-file=<value> (required) path to the file where the merged content will be written
|
|
299
|
-
-S, --ancestor-conflict-tag=<value> [default:
|
|
300
|
-
-X, --local-conflict-tag=<value> [default:
|
|
301
|
-
-Y, --other-conflict-tag=<value> [default:
|
|
275
|
+
-S, --ancestor-conflict-tag=<value> [default: BASE] string used to tag ancestor version in conflicts
|
|
276
|
+
-X, --local-conflict-tag=<value> [default: LOCAL] string used to tag local version in conflicts
|
|
277
|
+
-Y, --other-conflict-tag=<value> [default: REMOTE] string used to tag other version in conflicts
|
|
302
278
|
|
|
303
279
|
GLOBAL FLAGS
|
|
304
280
|
--flags-dir=<value> Import flag values from a directory.
|
|
@@ -323,7 +299,7 @@ EXAMPLES
|
|
|
323
299
|
- output-file is the path to the file where the merged content will be written
|
|
324
300
|
```
|
|
325
301
|
|
|
326
|
-
_See code: [src/commands/git/merge/driver/run.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0
|
|
302
|
+
_See code: [src/commands/git/merge/driver/run.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0/src/commands/git/merge/driver/run.ts)_
|
|
327
303
|
|
|
328
304
|
## `sf git merge driver uninstall`
|
|
329
305
|
|
|
@@ -353,7 +329,7 @@ EXAMPLES
|
|
|
353
329
|
$ sf git merge driver uninstall
|
|
354
330
|
```
|
|
355
331
|
|
|
356
|
-
_See code: [src/commands/git/merge/driver/uninstall.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0
|
|
332
|
+
_See code: [src/commands/git/merge/driver/uninstall.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.4.0/src/commands/git/merge/driver/uninstall.ts)_
|
|
357
333
|
<!-- commandsstop -->
|
|
358
334
|
## Changelog
|
|
359
335
|
|
|
@@ -4,6 +4,7 @@ import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
|
4
4
|
import { DEFAULT_ANCESTOR_CONFLICT_TAG, DEFAULT_CONFLICT_MARKER_SIZE, DEFAULT_LOCAL_CONFLICT_TAG, DEFAULT_OTHER_CONFLICT_TAG, } from '../../../../constant/conflictConstant.js';
|
|
5
5
|
import { PLUGIN_NAME } from '../../../../constant/pluginConstant.js';
|
|
6
6
|
import { MergeDriver } from '../../../../driver/MergeDriver.js';
|
|
7
|
+
import { ConflictMarker } from '../../../../merger/conflictMarker.js';
|
|
7
8
|
import { log } from '../../../../utils/LoggingDecorator.js';
|
|
8
9
|
import { Logger } from '../../../../utils/LoggingService.js';
|
|
9
10
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
@@ -64,15 +65,16 @@ export default class Run extends SfCommand {
|
|
|
64
65
|
async run() {
|
|
65
66
|
Logger.info('Merge starting');
|
|
66
67
|
const { flags } = await this.parse(Run);
|
|
67
|
-
const
|
|
68
|
+
const conflicConfig = {
|
|
68
69
|
conflictMarkerSize: flags['conflict-marker-size'],
|
|
69
70
|
ancestorConflictTag: flags['ancestor-conflict-tag'],
|
|
70
71
|
localConflictTag: flags['local-conflict-tag'],
|
|
71
72
|
otherConflictTag: flags['other-conflict-tag'],
|
|
72
73
|
};
|
|
74
|
+
ConflictMarker.setConflictConfig(conflicConfig);
|
|
73
75
|
Logger.debug(`flags: ${JSON.stringify(flags)}`);
|
|
74
|
-
Logger.debug(`
|
|
75
|
-
const mergeDriver = new MergeDriver(
|
|
76
|
+
Logger.debug(`conflicConfig: ${JSON.stringify(conflicConfig)}`);
|
|
77
|
+
const mergeDriver = new MergeDriver();
|
|
76
78
|
const hasConflict = await mergeDriver.mergeFiles(flags['ancestor-file'], flags['local-file'], flags['other-file']);
|
|
77
79
|
Logger.info(`Merge completed with ${hasConflict ? 'conflicts' : 'no conflicts'}`);
|
|
78
80
|
process.exitCode = hasConflict ? ERROR_EXIT_CODE : SUCCESS_EXIT_CODE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../src/commands/git/merge/driver/run.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,0CAA0C,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../src/commands/git/merge/driver/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ export declare const DEFAULT_CONFLICT_MARKER_SIZE = 7;
|
|
|
2
2
|
export declare const ANCESTOR_CONFLICT_MARKER = "|";
|
|
3
3
|
export declare const LOCAL_CONFLICT_MARKER = "<";
|
|
4
4
|
export declare const OTHER_CONFLICT_MARKER = ">";
|
|
5
|
-
export declare const DEFAULT_ANCESTOR_CONFLICT_TAG = "
|
|
6
|
-
export declare const DEFAULT_LOCAL_CONFLICT_TAG = "
|
|
7
|
-
export declare const DEFAULT_OTHER_CONFLICT_TAG = "
|
|
5
|
+
export declare const DEFAULT_ANCESTOR_CONFLICT_TAG = "BASE";
|
|
6
|
+
export declare const DEFAULT_LOCAL_CONFLICT_TAG = "LOCAL";
|
|
7
|
+
export declare const DEFAULT_OTHER_CONFLICT_TAG = "REMOTE";
|
|
8
8
|
export declare const SEPARATOR = "=";
|
|
@@ -2,8 +2,8 @@ export const DEFAULT_CONFLICT_MARKER_SIZE = 7;
|
|
|
2
2
|
export const ANCESTOR_CONFLICT_MARKER = '|';
|
|
3
3
|
export const LOCAL_CONFLICT_MARKER = '<';
|
|
4
4
|
export const OTHER_CONFLICT_MARKER = '>';
|
|
5
|
-
export const DEFAULT_ANCESTOR_CONFLICT_TAG = '
|
|
6
|
-
export const DEFAULT_LOCAL_CONFLICT_TAG = '
|
|
7
|
-
export const DEFAULT_OTHER_CONFLICT_TAG = '
|
|
5
|
+
export const DEFAULT_ANCESTOR_CONFLICT_TAG = 'BASE';
|
|
6
|
+
export const DEFAULT_LOCAL_CONFLICT_TAG = 'LOCAL';
|
|
7
|
+
export const DEFAULT_OTHER_CONFLICT_TAG = 'REMOTE';
|
|
8
8
|
export const SEPARATOR = '=';
|
|
9
9
|
//# sourceMappingURL=conflictConstant.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflictConstant.js","sourceRoot":"","sources":["../../src/constant/conflictConstant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;AACxC,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAA;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,
|
|
1
|
+
{"version":3,"file":"conflictConstant.js","sourceRoot":"","sources":["../../src/constant/conflictConstant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;AACxC,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAA;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAA;AACjD,MAAM,CAAC,MAAM,0BAA0B,GAAG,QAAQ,CAAA;AAClD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAA"}
|
|
@@ -1,7 +1 @@
|
|
|
1
1
|
export declare const TEXT_TAG = "#text";
|
|
2
|
-
export declare const XML_DECL = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
|
|
3
|
-
export declare const XML_COMMENT_PROP_NAME = "#xml__comment";
|
|
4
|
-
export declare const CDATA_PROP_NAME = "__cdata";
|
|
5
|
-
export declare const XML_INDENT = " ";
|
|
6
|
-
export declare const NAMESPACE_PREFIX = "@_";
|
|
7
|
-
export declare const NAMESPACE_ROOT = ":@";
|
|
@@ -1,8 +1,2 @@
|
|
|
1
1
|
export const TEXT_TAG = '#text';
|
|
2
|
-
export const XML_DECL = '<?xml version="1.0" encoding="UTF-8"?>\n';
|
|
3
|
-
export const XML_COMMENT_PROP_NAME = '#xml__comment';
|
|
4
|
-
export const CDATA_PROP_NAME = '__cdata';
|
|
5
|
-
export const XML_INDENT = ' ';
|
|
6
|
-
export const NAMESPACE_PREFIX = '@_';
|
|
7
|
-
export const NAMESPACE_ROOT = ':@';
|
|
8
2
|
//# sourceMappingURL=parserConstant.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parserConstant.js","sourceRoot":"","sources":["../../src/constant/parserConstant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAA
|
|
1
|
+
{"version":3,"file":"parserConstant.js","sourceRoot":"","sources":["../../src/constant/parserConstant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAA"}
|
|
@@ -6,16 +6,12 @@ import { log } from '../utils/LoggingDecorator.js';
|
|
|
6
6
|
import { Logger } from '../utils/LoggingService.js';
|
|
7
7
|
import { detectEol, normalizeEol } from '../utils/mergeUtils.js';
|
|
8
8
|
export class MergeDriver {
|
|
9
|
-
config;
|
|
10
|
-
constructor(config) {
|
|
11
|
-
this.config = config;
|
|
12
|
-
}
|
|
13
9
|
async mergeFiles(ancestorFile, ourFile, theirFile) {
|
|
14
10
|
// Read all three versions
|
|
15
11
|
const [ancestorContent, ourContent, theirContent] = await Promise.all([ancestorFile, ourFile, theirFile]
|
|
16
12
|
.map(normalize)
|
|
17
13
|
.map(path => readFile(path, 'utf8')));
|
|
18
|
-
const xmlMerger = new XmlMerger(
|
|
14
|
+
const xmlMerger = new XmlMerger();
|
|
19
15
|
try {
|
|
20
16
|
const mergedContent = xmlMerger.mergeThreeWay(ancestorContent, ourContent, theirContent);
|
|
21
17
|
const targetEol = detectEol(ourContent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MergeDriver.js","sourceRoot":"","sources":["../../src/driver/MergeDriver.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"MergeDriver.js","sourceRoot":"","sources":["../../src/driver/MergeDriver.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAEhE,MAAM,OAAO,WAAW;IAEhB,AAAN,KAAK,CAAC,UAAU,CACd,YAAoB,EACpB,OAAe,EACf,SAAiB;QAEjB,0BAA0B;QAC1B,MAAM,CAAC,eAAe,EAAE,UAAU,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CACnE,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC;aAC/B,GAAG,CAAC,SAAS,CAAC;aACd,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CACvC,CAAA;QAED,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAA;QAEjC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAC3C,eAAe,EACf,UAAU,EACV,YAAY,CACb,CAAA;YAED,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;YACvC,MAAM,eAAe,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YACrE,MAAM,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAA;YAEpD,OAAO,aAAa,CAAC,WAAW,CAAA;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;YACnC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAC/B,MAAM,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAA;YAC/C,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF;AAjCO;IADL,GAAG;6CAiCH"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import type { MergeConfig } from '../types/conflictTypes.js';
|
|
2
1
|
import type { JsonArray, JsonObject } from '../types/jsonTypes.js';
|
|
3
2
|
export declare class JsonMerger {
|
|
4
|
-
private readonly orchestrator;
|
|
5
|
-
constructor(config: MergeConfig);
|
|
6
3
|
mergeThreeWay(ancestor: JsonObject | JsonArray, local: JsonObject | JsonArray, other: JsonObject | JsonArray): {
|
|
7
4
|
output: JsonArray;
|
|
8
5
|
hasConflict: boolean;
|
package/lib/merger/JsonMerger.js
CHANGED
|
@@ -1,37 +1,229 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
+
import { deepEqual } from 'fast-equals';
|
|
3
|
+
import { isEmpty, keyBy } from 'lodash-es';
|
|
4
|
+
import { MetadataService } from '../service/MetadataService.js';
|
|
2
5
|
import { NamespaceHandler } from '../service/NamespaceHandler.js';
|
|
3
|
-
import {
|
|
6
|
+
import { getScenario, MergeScenario } from '../types/mergeScenario.js';
|
|
4
7
|
import { log } from '../utils/LoggingDecorator.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
+
import { ensureArray, getUniqueSortedProps, isObject, isStringArray, } from '../utils/mergeUtils.js';
|
|
9
|
+
import { ConflictMarker } from './conflictMarker.js';
|
|
10
|
+
import { generateObj, mergeTextAttribute } from './textAttribute.js';
|
|
8
11
|
export class JsonMerger {
|
|
9
|
-
orchestrator;
|
|
10
|
-
constructor(config) {
|
|
11
|
-
this.orchestrator = new MergeOrchestrator(config, defaultNodeFactory);
|
|
12
|
-
}
|
|
13
12
|
mergeThreeWay(ancestor, local, other) {
|
|
14
13
|
const namespaceHandler = new NamespaceHandler();
|
|
15
14
|
const namespaces = namespaceHandler.processNamespaces(ancestor, local, other);
|
|
16
|
-
const
|
|
15
|
+
const scenario = getScenario(ancestor, local, other);
|
|
16
|
+
const acc = [];
|
|
17
17
|
const props = getUniqueSortedProps(ancestor, local, other);
|
|
18
18
|
for (const key of props) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
switch (scenario) {
|
|
20
|
+
case MergeScenario.ANCESTOR_ONLY:
|
|
21
|
+
break;
|
|
22
|
+
case MergeScenario.LOCAL_AND_OTHER:
|
|
23
|
+
acc.push(handlelocalAndother(key, local, other));
|
|
24
|
+
break;
|
|
25
|
+
case MergeScenario.ANCESTOR_AND_OTHER:
|
|
26
|
+
acc.push(handleAncestorAndother(key, ancestor, other));
|
|
27
|
+
break;
|
|
28
|
+
case MergeScenario.ANCESTOR_AND_LOCAL:
|
|
29
|
+
acc.push(handleAncestorAndlocal(key, ancestor, local));
|
|
30
|
+
break;
|
|
31
|
+
default: {
|
|
32
|
+
const obj = {
|
|
33
|
+
[key]: merge(ancestor[key], local[key], other[key]),
|
|
34
|
+
};
|
|
35
|
+
acc.push([obj]);
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const result = acc.flat();
|
|
41
|
+
namespaceHandler.addNamespacesToResult(result, namespaces);
|
|
28
42
|
return {
|
|
29
|
-
output:
|
|
30
|
-
hasConflict:
|
|
43
|
+
output: result,
|
|
44
|
+
hasConflict: ConflictMarker.hasConflictMarker(),
|
|
31
45
|
};
|
|
32
46
|
}
|
|
33
47
|
}
|
|
34
48
|
__decorate([
|
|
35
49
|
log
|
|
36
50
|
], JsonMerger.prototype, "mergeThreeWay", null);
|
|
51
|
+
function merge(ancestor, local, other) {
|
|
52
|
+
const acc = [];
|
|
53
|
+
const props = getUniqueSortedProps(ancestor, local, other);
|
|
54
|
+
for (const key of props) {
|
|
55
|
+
let values = [];
|
|
56
|
+
const ancestorOfKey = ancestor[key];
|
|
57
|
+
const localOfKey = local[key];
|
|
58
|
+
const otherOfKey = other[key];
|
|
59
|
+
const [ancestorkey, ourkey, theirkey] = [
|
|
60
|
+
ancestorOfKey,
|
|
61
|
+
localOfKey,
|
|
62
|
+
otherOfKey,
|
|
63
|
+
].map(ensureArray);
|
|
64
|
+
if (isStringArray(ancestorOfKey, localOfKey, otherOfKey)) {
|
|
65
|
+
values = mergeTextArrays(ancestorkey, ourkey, theirkey, key);
|
|
66
|
+
}
|
|
67
|
+
else if (isObject(ancestorOfKey, localOfKey, otherOfKey)) {
|
|
68
|
+
values = mergeArrays(ancestorkey, ourkey, theirkey, key);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
values = mergeTextAttribute(ancestorOfKey, localOfKey, otherOfKey, key);
|
|
72
|
+
}
|
|
73
|
+
acc.push(values);
|
|
74
|
+
}
|
|
75
|
+
return acc.flat();
|
|
76
|
+
}
|
|
77
|
+
function toJsonArray(inputObj) {
|
|
78
|
+
const acc = [];
|
|
79
|
+
for (const attribute of getUniqueSortedProps(inputObj)) {
|
|
80
|
+
const values = [];
|
|
81
|
+
const inputObjOfAttr = inputObj[attribute];
|
|
82
|
+
if (typeof inputObjOfAttr === 'object') {
|
|
83
|
+
const inputObjAtt = ensureArray(inputObjOfAttr);
|
|
84
|
+
for (const key of getUniqueSortedProps(inputObjAtt)) {
|
|
85
|
+
const inputObjKeyOfKey = inputObjAtt[key];
|
|
86
|
+
values.push({ [attribute]: toJsonArray(inputObjKeyOfKey) });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
values.push(generateObj(inputObjOfAttr, attribute));
|
|
91
|
+
}
|
|
92
|
+
acc.push(values);
|
|
93
|
+
}
|
|
94
|
+
return acc.flat();
|
|
95
|
+
}
|
|
96
|
+
const handlelocalAndother = (key, local, other) => {
|
|
97
|
+
const obj = {};
|
|
98
|
+
obj[key] = merge({}, local[key], other[key]);
|
|
99
|
+
const acc = [];
|
|
100
|
+
// Functional choice: Don't use deepEqual because it would tax performence when the ancestor is empty at a too high level of the metadata tree
|
|
101
|
+
// merge will functionally do the same itself while perfoming its normal function
|
|
102
|
+
acc.push(obj);
|
|
103
|
+
return acc;
|
|
104
|
+
};
|
|
105
|
+
const handleAncestorAndother = (key, ancestor, other) => {
|
|
106
|
+
const acc = [];
|
|
107
|
+
if (!deepEqual(ancestor, other)) {
|
|
108
|
+
const ancestorProp = {
|
|
109
|
+
[key]: toJsonArray(ancestor[key]),
|
|
110
|
+
};
|
|
111
|
+
const otherProp = {
|
|
112
|
+
[key]: toJsonArray(other[key]),
|
|
113
|
+
};
|
|
114
|
+
ConflictMarker.addConflictMarkers(acc, {}, ancestorProp, otherProp);
|
|
115
|
+
}
|
|
116
|
+
return acc;
|
|
117
|
+
};
|
|
118
|
+
const handleAncestorAndlocal = (key, ancestor, local) => {
|
|
119
|
+
const acc = [];
|
|
120
|
+
if (!deepEqual(ancestor, local)) {
|
|
121
|
+
const localProp = {
|
|
122
|
+
[key]: toJsonArray(local[key]),
|
|
123
|
+
};
|
|
124
|
+
const ancestorProp = {
|
|
125
|
+
[key]: toJsonArray(ancestor[key]),
|
|
126
|
+
};
|
|
127
|
+
ConflictMarker.addConflictMarkers(acc, localProp, ancestorProp, {});
|
|
128
|
+
}
|
|
129
|
+
return acc;
|
|
130
|
+
};
|
|
131
|
+
const mergeArrays = (ancestor, local, other, attribute) => {
|
|
132
|
+
const keyField = MetadataService.getKeyFieldExtractor(attribute);
|
|
133
|
+
if (!keyField) {
|
|
134
|
+
// const scenario: MergeScenario = getScenario(ancestor, local, other)
|
|
135
|
+
const arr = [];
|
|
136
|
+
// obj[attribute] = unionWith(local, other, deepEqual)
|
|
137
|
+
// obj[attribute] = mergeTextAttribute(local, other, deepEqual, attribute)
|
|
138
|
+
// obj[attribute] = []
|
|
139
|
+
ConflictMarker.addConflictMarkers(arr, toJsonArray({ [attribute]: local }), toJsonArray({ [attribute]: ancestor }), toJsonArray({ [attribute]: other }));
|
|
140
|
+
return arr.flat();
|
|
141
|
+
// return mergeTextAttribute(ancestor, local, other, attribute).flat()
|
|
142
|
+
}
|
|
143
|
+
const [keyedAnc, keyedlocal, keyedother] = [ancestor, local, other].map(arr => keyBy(arr, keyField));
|
|
144
|
+
return mergeByKeyField(keyedAnc, keyedlocal, keyedother, attribute);
|
|
145
|
+
};
|
|
146
|
+
const mergeTextArrays = (ancestor, local, other, attribute) => {
|
|
147
|
+
const localSet = new Set(local);
|
|
148
|
+
const otherSet = new Set(other);
|
|
149
|
+
// Simplest way to merge without removed elements
|
|
150
|
+
const removedInLocal = ancestor.filter(item => !localSet.has(item));
|
|
151
|
+
const removedInOther = ancestor.filter(item => !otherSet.has(item));
|
|
152
|
+
const removedSet = new Set([...removedInLocal, ...removedInOther]);
|
|
153
|
+
const merged = [...new Set([...ancestor, ...local, ...other])]
|
|
154
|
+
.filter(item => !removedSet.has(item))
|
|
155
|
+
.sort()
|
|
156
|
+
.map(item => generateObj(item, attribute));
|
|
157
|
+
const obj = [{ [attribute]: merged }];
|
|
158
|
+
return isEmpty(merged) ? [] : obj;
|
|
159
|
+
};
|
|
160
|
+
const mergeByKeyField = (ancestor, local, other, attribute) => {
|
|
161
|
+
const acc = [];
|
|
162
|
+
const props = getUniqueSortedProps(ancestor, local, other);
|
|
163
|
+
for (const key of props) {
|
|
164
|
+
const ancestorOfKey = ancestor[key];
|
|
165
|
+
const localOfKey = local[key];
|
|
166
|
+
const otherOfKey = other[key];
|
|
167
|
+
const scenario = getScenario(ancestorOfKey, localOfKey, otherOfKey);
|
|
168
|
+
const obj = {};
|
|
169
|
+
switch (scenario) {
|
|
170
|
+
case MergeScenario.OTHER_ONLY:
|
|
171
|
+
obj[attribute] = merge({}, {}, otherOfKey);
|
|
172
|
+
break;
|
|
173
|
+
case MergeScenario.LOCAL_ONLY:
|
|
174
|
+
obj[attribute] = merge({}, localOfKey, {});
|
|
175
|
+
break;
|
|
176
|
+
case MergeScenario.ANCESTOR_ONLY:
|
|
177
|
+
break;
|
|
178
|
+
case MergeScenario.LOCAL_AND_OTHER:
|
|
179
|
+
if (deepEqual(localOfKey, otherOfKey)) {
|
|
180
|
+
obj[attribute] = merge({}, {}, otherOfKey);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
obj[attribute] = merge({}, localOfKey, otherOfKey);
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
case MergeScenario.ANCESTOR_AND_OTHER:
|
|
187
|
+
if (!deepEqual(ancestorOfKey, otherOfKey)) {
|
|
188
|
+
const ancestorProp = {
|
|
189
|
+
[attribute]: merge({}, ancestorOfKey, {}),
|
|
190
|
+
};
|
|
191
|
+
const otherProp = {
|
|
192
|
+
[attribute]: merge({}, {}, otherOfKey),
|
|
193
|
+
};
|
|
194
|
+
ConflictMarker.addConflictMarkers(acc, {}, ancestorProp, otherProp);
|
|
195
|
+
}
|
|
196
|
+
break;
|
|
197
|
+
case MergeScenario.ANCESTOR_AND_LOCAL:
|
|
198
|
+
if (!deepEqual(ancestorOfKey, localOfKey)) {
|
|
199
|
+
const localProp = {
|
|
200
|
+
[attribute]: merge({}, localOfKey, {}),
|
|
201
|
+
};
|
|
202
|
+
const ancestorProp = {
|
|
203
|
+
[attribute]: merge({}, ancestorOfKey, {}),
|
|
204
|
+
};
|
|
205
|
+
ConflictMarker.addConflictMarkers(acc, localProp, ancestorProp, {});
|
|
206
|
+
}
|
|
207
|
+
break;
|
|
208
|
+
case MergeScenario.ALL:
|
|
209
|
+
if (deepEqual(localOfKey, otherOfKey)) {
|
|
210
|
+
obj[attribute] = merge({}, {}, otherOfKey);
|
|
211
|
+
}
|
|
212
|
+
else if (deepEqual(ancestorOfKey, localOfKey)) {
|
|
213
|
+
obj[attribute] = merge({}, {}, otherOfKey);
|
|
214
|
+
}
|
|
215
|
+
else if (deepEqual(ancestorOfKey, otherOfKey)) {
|
|
216
|
+
obj[attribute] = merge({}, localOfKey, {});
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
obj[attribute] = merge(ancestorOfKey, localOfKey, otherOfKey);
|
|
220
|
+
}
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
if (!isEmpty(obj)) {
|
|
224
|
+
acc.push(obj);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return acc;
|
|
228
|
+
};
|
|
37
229
|
//# sourceMappingURL=JsonMerger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonMerger.js","sourceRoot":"","sources":["../../src/merger/JsonMerger.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"JsonMerger.js","sourceRoot":"","sources":["../../src/merger/JsonMerger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
import type { MergeConfig } from '../types/conflictTypes.js';
|
|
2
1
|
export declare class XmlMerger {
|
|
3
|
-
private readonly config;
|
|
4
|
-
private readonly formatter;
|
|
5
|
-
constructor(config: MergeConfig);
|
|
6
2
|
mergeThreeWay(ancestorContent: string, ourContent: string, theirContent: string): {
|
|
7
3
|
output: string;
|
|
8
4
|
hasConflict: boolean;
|
|
9
5
|
};
|
|
10
|
-
private formatXmlOutput;
|
|
11
6
|
}
|
package/lib/merger/XmlMerger.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { XMLBuilder, XMLParser } from 'fast-xml-parser';
|
|
3
|
-
import { CDATA_PROP_NAME, XML_COMMENT_PROP_NAME, XML_DECL, XML_INDENT, } from '../constant/parserConstant.js';
|
|
4
3
|
import { log } from '../utils/LoggingDecorator.js';
|
|
5
|
-
import { ConflictMarkerFormatter } from './ConflictMarkerFormatter.js';
|
|
6
4
|
import { JsonMerger } from './JsonMerger.js';
|
|
5
|
+
const XML_DECL = '<?xml version="1.0" encoding="UTF-8"?>\n';
|
|
6
|
+
const XML_COMMENT_PROP_NAME = '#xml__comment';
|
|
7
7
|
const baseOptions = {
|
|
8
|
-
cdataPropName:
|
|
8
|
+
cdataPropName: '__cdata',
|
|
9
9
|
commentPropName: XML_COMMENT_PROP_NAME,
|
|
10
10
|
ignoreAttributes: false,
|
|
11
11
|
processEntities: false,
|
|
@@ -16,44 +16,41 @@ const parserOptions = {
|
|
|
16
16
|
numberParseOptions: { leadingZeros: false, hex: false },
|
|
17
17
|
parseAttributeValue: false,
|
|
18
18
|
parseTagValue: false,
|
|
19
|
+
// preserveOrder: true,
|
|
19
20
|
};
|
|
20
21
|
const builderOptions = {
|
|
21
22
|
...baseOptions,
|
|
22
23
|
format: true,
|
|
23
|
-
indentBy:
|
|
24
|
+
indentBy: ' ',
|
|
24
25
|
preserveOrder: true,
|
|
25
26
|
};
|
|
26
27
|
const correctComments = (xml) => xml.includes('<!--') ? xml.replace(/\s+<!--(.*?)-->\s+/g, '<!--$1-->') : xml;
|
|
28
|
+
const correctConflictIndent = (xml) => xml
|
|
29
|
+
.replace(/[ \t]+(<<<<<<<|\|\|\|\|\|\|\||=======|>>>>>>>)/g, '$1')
|
|
30
|
+
.replace(/^[ \t]*[\n\r]+/gm, '');
|
|
31
|
+
const handleSpecialEntities = (xml) => xml
|
|
32
|
+
.replaceAll('&#160;', ' ')
|
|
33
|
+
.replaceAll('<<<<<<<', '<<<<<<<')
|
|
34
|
+
.replaceAll('>>>>>>>', '>>>>>>>');
|
|
27
35
|
export class XmlMerger {
|
|
28
|
-
config;
|
|
29
|
-
formatter;
|
|
30
|
-
constructor(config) {
|
|
31
|
-
this.config = config;
|
|
32
|
-
this.formatter = new ConflictMarkerFormatter(config);
|
|
33
|
-
}
|
|
34
36
|
mergeThreeWay(ancestorContent, ourContent, theirContent) {
|
|
35
37
|
const parser = new XMLParser(parserOptions);
|
|
36
38
|
const ancestorObj = parser.parse(ancestorContent);
|
|
37
39
|
const ourObj = parser.parse(ourContent);
|
|
38
40
|
const theirObj = parser.parse(theirContent);
|
|
39
41
|
// Perform deep merge of XML objects
|
|
40
|
-
const jsonMerger = new JsonMerger(
|
|
42
|
+
const jsonMerger = new JsonMerger();
|
|
41
43
|
const mergedResult = jsonMerger.mergeThreeWay(ancestorObj, ourObj, theirObj);
|
|
42
44
|
// Convert back to XML and format
|
|
43
45
|
const builder = new XMLBuilder(builderOptions);
|
|
44
46
|
const mergedXml = builder.build(mergedResult.output);
|
|
45
47
|
return {
|
|
46
|
-
output: mergedXml.length
|
|
48
|
+
output: mergedXml.length
|
|
49
|
+
? correctConflictIndent(correctComments(XML_DECL.concat(handleSpecialEntities(mergedXml))))
|
|
50
|
+
: '',
|
|
47
51
|
hasConflict: mergedResult.hasConflict,
|
|
48
52
|
};
|
|
49
53
|
}
|
|
50
|
-
formatXmlOutput(xml) {
|
|
51
|
-
let result = XML_DECL.concat(xml);
|
|
52
|
-
result = this.formatter.handleSpecialEntities(result);
|
|
53
|
-
result = correctComments(result);
|
|
54
|
-
result = this.formatter.correctConflictIndent(result);
|
|
55
|
-
return result;
|
|
56
|
-
}
|
|
57
54
|
}
|
|
58
55
|
__decorate([
|
|
59
56
|
log
|
|
@@ -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,
|
|
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,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,QAAQ,GAAG,0CAA0C,CAAA;AAC3D,MAAM,qBAAqB,GAAG,eAAe,CAAA;AAE7C,MAAM,WAAW,GAAG;IAClB,aAAa,EAAE,SAAS;IACxB,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;IACpB,uBAAuB;CACxB,CAAA;AAED,MAAM,cAAc,GAAG;IACrB,GAAG,WAAW;IACd,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,MAAM;IAChB,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,qBAAqB,GAAG,CAAC,GAAW,EAAU,EAAE,CACpD,GAAG;KACA,OAAO,CAAC,iDAAiD,EAAE,IAAI,CAAC;KAChE,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;AAEpC,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAU,EAAE,CACpD,GAAG;KACA,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC;KAClC,UAAU,CAAC,8BAA8B,EAAE,SAAS,CAAC;KACrD,UAAU,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAA;AAE1D,MAAM,OAAO,SAAS;IAEpB,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,EAAE,CAAA;QACnC,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;gBACtB,CAAC,CAAC,qBAAqB,CACnB,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CACnE;gBACH,CAAC,CAAC,EAAE;YACN,WAAW,EAAE,YAAY,CAAC,WAAW;SACtC,CAAA;IACH,CAAC;CACF;AA3BC;IADC,GAAG;8CA2BH"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { conflicConfig } from '../types/conflictTypes.js';
|
|
2
|
+
import type { JsonArray, JsonObject } from '../types/jsonTypes.js';
|
|
3
|
+
export declare class ConflictMarker {
|
|
4
|
+
private static hasConflict;
|
|
5
|
+
private static baseMarker;
|
|
6
|
+
private static localMarker;
|
|
7
|
+
private static otherMarker;
|
|
8
|
+
private static separatorMarker;
|
|
9
|
+
static hasConflictMarker(): boolean;
|
|
10
|
+
static addConflictMarkers(acc: JsonArray, local: JsonObject | JsonArray, ancestor: JsonObject | JsonArray, other: JsonObject | JsonArray): void;
|
|
11
|
+
static setConflictConfig(conflictConfig: conflicConfig): void;
|
|
12
|
+
}
|