sf-git-merge-driver 1.0.0-dev-3.13989111458-1 → 1.0.0-dev-3.13990488196-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -47,7 +47,7 @@ EXAMPLES
47
47
  $ sf git merge driver install
48
48
  ```
49
49
 
50
- _See code: [src/commands/git/merge/driver/install.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.0.0-dev-3.13989111458-1/src/commands/git/merge/driver/install.ts)_
50
+ _See code: [src/commands/git/merge/driver/install.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.0.0-dev-3.13990488196-1/src/commands/git/merge/driver/install.ts)_
51
51
 
52
52
  ## `sf git merge driver run`
53
53
 
@@ -85,7 +85,7 @@ EXAMPLES
85
85
  - output-file is the path to the file where the merged content will be written
86
86
  ```
87
87
 
88
- _See code: [src/commands/git/merge/driver/run.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.0.0-dev-3.13989111458-1/src/commands/git/merge/driver/run.ts)_
88
+ _See code: [src/commands/git/merge/driver/run.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.0.0-dev-3.13990488196-1/src/commands/git/merge/driver/run.ts)_
89
89
 
90
90
  ## `sf git merge driver uninstall`
91
91
 
@@ -112,7 +112,7 @@ EXAMPLES
112
112
  $ sf git merge driver uninstall
113
113
  ```
114
114
 
115
- _See code: [src/commands/git/merge/driver/uninstall.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.0.0-dev-3.13989111458-1/src/commands/git/merge/driver/uninstall.ts)_
115
+ _See code: [src/commands/git/merge/driver/uninstall.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.0.0-dev-3.13990488196-1/src/commands/git/merge/driver/uninstall.ts)_
116
116
  <!-- commandsstop -->
117
117
 
118
118
 
@@ -8,7 +8,12 @@ export declare class JsonMerger {
8
8
  /**
9
9
  * Main entry point for merging JSON values
10
10
  */
11
- mergeObjects(ancestor: JsonValue | undefined, ours: JsonValue, theirs: JsonValue): JsonValue;
11
+ mergeObjects(ancestor: JsonObject | JsonArray, ours: JsonObject | JsonArray, theirs: JsonObject | JsonArray, parent?: JsonObject | JsonArray): JsonArray;
12
+ private mergeTextAttribute;
13
+ /**
14
+ * Gets the typeof of the attribute
15
+ */
16
+ private getAttributePrimarytype;
12
17
  /**
13
18
  * Ensures a value is an array
14
19
  */
@@ -29,9 +34,5 @@ export declare class JsonMerger {
29
34
  * Merges arrays using a key field
30
35
  */
31
36
  private mergeByKeyField;
32
- /**
33
- * Gets the key value for an item using the specified key field
34
- */
35
- private getItemKey;
36
37
  }
37
38
  export {};
@@ -1,63 +1,293 @@
1
- import { castArray, differenceWith, isEqual, isNil, unionWith } from 'lodash-es';
1
+ import { castArray, isEqual, isNil, keyBy, unionWith } from 'lodash-es'; // , differenceWith
2
2
  import { KEY_FIELD_METADATA } from '../constant/metadataConstant.js';
3
3
  export class JsonMerger {
4
4
  /**
5
5
  * Main entry point for merging JSON values
6
6
  */
7
- mergeObjects(ancestor, ours, theirs) {
8
- // Handle root object (e.g., Profile)
9
- if (typeof ours === 'object' &&
10
- ours !== null &&
11
- !Array.isArray(ours) &&
12
- typeof theirs === 'object' &&
13
- theirs !== null &&
14
- !Array.isArray(theirs)) {
15
- // Get the base attribute (e.g., Profile)
16
- const baseKey = Object.keys(ours)[0];
17
- if (baseKey && Object.keys(theirs)[0] === baseKey) {
18
- const result = { ...ours };
19
- // Get the content of the base attribute
20
- const ourContent = ours[baseKey];
21
- const theirContent = theirs[baseKey];
22
- const ancestorContent = ancestor &&
23
- typeof ancestor === 'object' &&
24
- !Array.isArray(ancestor) &&
25
- baseKey in ancestor
26
- ? ancestor[baseKey]
27
- : {};
28
- // Get all properties from both contents
29
- const allProperties = new Set([
30
- ...Object.keys(ourContent),
31
- ...Object.keys(theirContent),
32
- ]);
33
- // Process each property
34
- const mergedContent = { ...ourContent };
35
- for (const property of allProperties) {
36
- // Skip if property doesn't exist in their content
37
- if (!(property in theirContent))
38
- continue;
39
- // Use their version if property doesn't exist in our content
40
- if (!(property in mergedContent)) {
41
- mergedContent[property] = this.ensureArray(theirContent[property]);
42
- continue;
7
+ mergeObjects(ancestor, ours, theirs, parent //,
8
+ // attrib?: string
9
+ ) {
10
+ // Get all properties from three ways
11
+ const arrProperties = [];
12
+ let caseCode = 0;
13
+ if (ancestor && !isEqual(ancestor, {})) {
14
+ caseCode += 100;
15
+ arrProperties.push(...Object.keys(ancestor));
16
+ }
17
+ else {
18
+ ancestor = {};
19
+ }
20
+ if (ours && !isEqual(ours, {})) {
21
+ caseCode += 10;
22
+ arrProperties.push(...Object.keys(ours));
23
+ }
24
+ else {
25
+ ours = {};
26
+ }
27
+ if (theirs && !isEqual(theirs, {})) {
28
+ caseCode += 1;
29
+ arrProperties.push(...Object.keys(theirs));
30
+ }
31
+ else {
32
+ theirs = {};
33
+ }
34
+ const allProperties = new Set(arrProperties.sort());
35
+ // TODO filter the namespace here and reapply it in the end of the loop if necessary
36
+ // Process each property
37
+ const mergedContent = [];
38
+ for (const property of allProperties) {
39
+ // console.info('property: '+property+'\ntypeof: '+this.getAttributePrimarytype(
40
+ // ancestor[property],
41
+ // ours[property],
42
+ // theirs[property]
43
+ // ))
44
+ switch (this.getAttributePrimarytype(ancestor[property], ours[property], theirs[property])) {
45
+ case 'object': {
46
+ if (parent) {
47
+ mergedContent.push(...this.mergeArrays(this.ensureArray(ancestor[property]), this.ensureArray(ours[property]), this.ensureArray(theirs[property]), this.ensureArray(parent), property, this.getKeyField(property)));
48
+ }
49
+ else {
50
+ let propObject = {};
51
+ switch (caseCode) {
52
+ case 100:
53
+ return [];
54
+ case 11:
55
+ if (isEqual(ours, theirs)) {
56
+ propObject[property] = [];
57
+ propObject[property].push(...this.mergeObjects({}, ours[property], {}, propObject));
58
+ mergedContent.push(propObject);
59
+ }
60
+ else {
61
+ mergedContent.push({ '#text': '\n<<<<<<< LOCAL' });
62
+ propObject[property] = [];
63
+ propObject[property].push(...this.mergeObjects({}, ours[property], {}, propObject));
64
+ mergedContent.push(propObject);
65
+ mergedContent.push({ '#text': '||||||| BASE' });
66
+ mergedContent.push({ '#text': '\n' });
67
+ mergedContent.push({ '#text': '=======' });
68
+ propObject = {};
69
+ propObject[property] = [];
70
+ propObject[property].push(...this.mergeObjects({}, {}, theirs[property], propObject));
71
+ mergedContent.push(propObject);
72
+ mergedContent.push({ '#text': '>>>>>>> REMOTE' });
73
+ }
74
+ break;
75
+ case 101:
76
+ if (isEqual(ancestor, theirs)) {
77
+ return [];
78
+ }
79
+ else {
80
+ mergedContent.push({ '#text': '\n<<<<<<< LOCAL' });
81
+ mergedContent.push({ '#text': '\n' });
82
+ mergedContent.push({ '#text': '||||||| BASE' });
83
+ propObject[property] = [];
84
+ propObject[property].push(...this.mergeObjects({}, ancestor[property], {}, propObject));
85
+ mergedContent.push(propObject);
86
+ mergedContent.push({ '#text': '=======' });
87
+ propObject = {};
88
+ propObject[property] = [];
89
+ propObject[property].push(...this.mergeObjects({}, {}, theirs[property], propObject));
90
+ mergedContent.push(propObject);
91
+ mergedContent.push({ '#text': '>>>>>>> REMOTE' });
92
+ }
93
+ break;
94
+ case 110:
95
+ if (isEqual(ancestor, ours)) {
96
+ return [];
97
+ }
98
+ else {
99
+ mergedContent.push({ '#text': '\n<<<<<<< LOCAL' });
100
+ propObject[property] = [];
101
+ propObject[property].push(...this.mergeObjects({}, ours[property], {}, propObject));
102
+ mergedContent.push(propObject);
103
+ mergedContent.push({ '#text': '||||||| BASE' });
104
+ propObject = {};
105
+ propObject[property] = [];
106
+ propObject[property].push(...this.mergeObjects({}, {}, ancestor[property], propObject));
107
+ mergedContent.push(propObject);
108
+ mergedContent.push({ '#text': '=======' });
109
+ mergedContent.push({ '#text': '\n' });
110
+ mergedContent.push({ '#text': '>>>>>>> REMOTE' });
111
+ }
112
+ break;
113
+ default:
114
+ propObject[property] = [];
115
+ propObject[property].push(...this.mergeObjects(ancestor[property], ours[property], theirs[property], propObject));
116
+ mergedContent.push(propObject);
117
+ break;
118
+ }
43
119
  }
44
- // Ensure both values are arrays
45
- const ourArray = this.ensureArray(mergedContent[property]);
46
- const theirArray = this.ensureArray(theirContent[property]);
47
- const ancestorArray = property in ancestorContent
48
- ? this.ensureArray(ancestorContent[property])
49
- : [];
50
- // Get the key field for this property if available
51
- const keyField = this.getKeyField(property);
52
- // Merge the arrays
53
- mergedContent[property] = this.mergeArrays(ancestorArray, ourArray, theirArray, keyField);
120
+ break;
54
121
  }
55
- result[baseKey] = mergedContent;
56
- return result;
122
+ default:
123
+ if (property.startsWith('@_') && parent) {
124
+ if (parent[':@']) {
125
+ parent[':@'][property] = ancestor[property];
126
+ }
127
+ else {
128
+ parent[':@'] = {};
129
+ parent[':@'][property] = ancestor[property];
130
+ }
131
+ }
132
+ else {
133
+ mergedContent.push(...this.mergeTextAttribute(property, ancestor[property], ours[property], theirs[property]));
134
+ }
135
+ break;
57
136
  }
58
137
  }
59
- // Default to our version for other cases
60
- return ours;
138
+ return mergedContent;
139
+ // Handle root object (e.g., Profile)
140
+ // if (
141
+ // typeof ours === 'object' &&
142
+ // ours !== null &&
143
+ // !Array.isArray(ours) &&
144
+ // typeof theirs === 'object' &&
145
+ // theirs !== null &&
146
+ // !Array.isArray(theirs)
147
+ // ) {
148
+ // // Get the base attribute (e.g., Profile)
149
+ // const baseKey = Object.keys(ours)[0]
150
+ // if (baseKey && Object.keys(theirs)[0] === baseKey) {
151
+ // const result = { ...ours } as JsonObject
152
+ // // Get the content of the base attribute
153
+ // const ourContent = ours[baseKey] as JsonObject
154
+ // const theirContent = theirs[baseKey] as JsonObject
155
+ // const ancestorContent =
156
+ // ancestor &&
157
+ // typeof ancestor === 'object' &&
158
+ // !Array.isArray(ancestor) &&
159
+ // baseKey in ancestor
160
+ // ? ((ancestor as JsonObject)[baseKey] as JsonObject)
161
+ // : {}
162
+ // // Get all properties from both contents
163
+ // const allProperties = new Set([
164
+ // ...Object.keys(ourContent),
165
+ // ...Object.keys(theirContent),
166
+ // ])
167
+ // // Process each property
168
+ // const mergedContent = { ...ourContent } as JsonObject
169
+ // for (const property of allProperties) {
170
+ // // Skip if property doesn't exist in their content
171
+ // if (!(property in theirContent)) continue
172
+ // // Use their version if property doesn't exist in our content
173
+ // if (!(property in mergedContent)) {
174
+ // mergedContent[property] = this.ensureArray(theirContent[property])
175
+ // continue
176
+ // }
177
+ // // Ensure both values are arrays
178
+ // const ourArray = this.ensureArray(mergedContent[property])
179
+ // const theirArray = this.ensureArray(theirContent[property])
180
+ // const ancestorArray =
181
+ // property in ancestorContent
182
+ // ? this.ensureArray(ancestorContent[property])
183
+ // : []
184
+ // // Get the key field for this property if available
185
+ // const keyField = this.getKeyField(property)
186
+ // // Merge the arrays
187
+ // mergedContent[property] = this.mergeArrays(
188
+ // ancestorArray,
189
+ // ourArray,
190
+ // theirArray,
191
+ // keyField
192
+ // )
193
+ // }
194
+ // result[baseKey] = mergedContent
195
+ // return result
196
+ // }
197
+ // }
198
+ // // Default to our version for other cases
199
+ // return ours
200
+ }
201
+ mergeTextAttribute(attrib, ancestor, ours, theirs) {
202
+ const objAnc = {};
203
+ const objOurs = {};
204
+ const objTheirs = {};
205
+ let caseCode = 0;
206
+ if (!isNil(ancestor)) {
207
+ objAnc[attrib] = [{ '#text': ancestor }];
208
+ caseCode += 100;
209
+ }
210
+ if (!isNil(ours)) {
211
+ objOurs[attrib] = [{ '#text': ours }];
212
+ caseCode += 10;
213
+ }
214
+ if (!isNil(theirs)) {
215
+ objTheirs[attrib] = [{ '#text': theirs }];
216
+ caseCode += 1;
217
+ }
218
+ const finalArray = [];
219
+ switch (caseCode) {
220
+ case 1:
221
+ finalArray.push(objTheirs);
222
+ break;
223
+ case 10:
224
+ finalArray.push(objOurs);
225
+ break;
226
+ case 11:
227
+ if (ours === theirs) {
228
+ finalArray.push(objOurs);
229
+ }
230
+ else {
231
+ finalArray.push({ '#text': '\n<<<<<<< LOCAL' });
232
+ finalArray.push(objOurs);
233
+ finalArray.push({ '#text': '||||||| BASE' });
234
+ finalArray.push({ '#text': '\n' });
235
+ finalArray.push({ '#text': '=======' });
236
+ finalArray.push(objTheirs);
237
+ finalArray.push({ '#text': '>>>>>>> REMOTE' });
238
+ }
239
+ break;
240
+ case 101:
241
+ if (ancestor !== theirs) {
242
+ finalArray.push({ '#text': '\n<<<<<<< LOCAL' });
243
+ finalArray.push({ '#text': '\n' });
244
+ finalArray.push({ '#text': '||||||| BASE' });
245
+ finalArray.push(objAnc);
246
+ finalArray.push({ '#text': '=======' });
247
+ finalArray.push(objTheirs);
248
+ finalArray.push({ '#text': '>>>>>>> REMOTE' });
249
+ }
250
+ break;
251
+ case 110:
252
+ if (ancestor !== ours) {
253
+ finalArray.push({ '#text': '\n<<<<<<< LOCAL' });
254
+ finalArray.push(objOurs);
255
+ finalArray.push({ '#text': '||||||| BASE' });
256
+ finalArray.push(objAnc);
257
+ finalArray.push({ '#text': '=======' });
258
+ finalArray.push({ '#text': '\n' });
259
+ finalArray.push({ '#text': '>>>>>>> REMOTE' });
260
+ }
261
+ break;
262
+ case 111:
263
+ if (ours === theirs) {
264
+ finalArray.push(objOurs);
265
+ }
266
+ else if (ancestor === ours) {
267
+ finalArray.push(objTheirs);
268
+ }
269
+ else if (ancestor === theirs) {
270
+ finalArray.push(objOurs);
271
+ }
272
+ else {
273
+ finalArray.push({ '#text': '\n<<<<<<< LOCAL' });
274
+ finalArray.push(objOurs);
275
+ finalArray.push({ '#text': '||||||| BASE' });
276
+ finalArray.push(objAnc);
277
+ finalArray.push({ '#text': '=======' });
278
+ finalArray.push(objTheirs);
279
+ finalArray.push({ '#text': '>>>>>>> REMOTE' });
280
+ }
281
+ break;
282
+ default:
283
+ }
284
+ return finalArray;
285
+ }
286
+ /**
287
+ * Gets the typeof of the attribute
288
+ */
289
+ getAttributePrimarytype(ancestor, ours, theirs) {
290
+ return typeof [ancestor, theirs, ours].find(ele => !isNil(ele));
61
291
  }
62
292
  /**
63
293
  * Ensures a value is an array
@@ -76,17 +306,20 @@ export class JsonMerger {
76
306
  /**
77
307
  * Merges arrays using the specified key field if available
78
308
  */
79
- mergeArrays(ancestor, ours, theirs, keyField) {
309
+ mergeArrays(ancestor, ours, theirs, parent, attribute, keyField) {
310
+ const propObject = {};
80
311
  // If no key field, use unionWith to merge arrays without duplicates
81
312
  if (!keyField) {
82
- return unionWith([...ours], theirs, isEqual);
313
+ propObject[attribute] = unionWith([...ours], theirs, isEqual);
314
+ return [propObject];
83
315
  }
84
316
  // Special case for array position
85
317
  if (keyField === '<array>') {
86
- return this.mergeByPosition(ancestor, ours, theirs);
318
+ propObject[attribute] = this.mergeByPosition(ancestor, ours, theirs);
319
+ return [propObject];
87
320
  }
88
321
  // Merge using key field
89
- return this.mergeByKeyField(ancestor, ours, theirs, keyField);
322
+ return this.mergeByKeyField(ancestor, ours, theirs, keyField, attribute, parent);
90
323
  }
91
324
  /**
92
325
  * Merges arrays by position
@@ -112,62 +345,216 @@ export class JsonMerger {
112
345
  /**
113
346
  * Merges arrays using a key field
114
347
  */
115
- mergeByKeyField(ancestor, ours, theirs, keyField) {
116
- const result = [...ours];
117
- const processed = new Set();
118
- // Create maps for efficient lookups
119
- const ourMap = new Map();
120
- const theirMap = new Map();
121
- const ancestorMap = new Map();
122
- // Populate maps
123
- for (const item of ours) {
124
- const key = this.getItemKey(item, keyField);
125
- if (key)
126
- ourMap.set(key, item);
127
- }
128
- for (const item of theirs) {
129
- const key = this.getItemKey(item, keyField);
130
- if (key)
131
- theirMap.set(key, item);
132
- }
133
- for (const item of ancestor) {
134
- const key = this.getItemKey(item, keyField);
135
- if (key)
136
- ancestorMap.set(key, item);
137
- }
138
- // Process items in our version
139
- for (let i = 0; i < result.length; i++) {
140
- const key = this.getItemKey(result[i], keyField);
141
- if (!key)
142
- continue;
143
- processed.add(key);
144
- // If item exists in both versions
145
- if (theirMap.has(key)) {
146
- const theirItem = theirMap.get(key);
147
- const ancestorItem = ancestorMap.get(key);
148
- // If they changed it from ancestor but we didn't, use their version
149
- if (!isEqual(theirItem, ancestorItem) &&
150
- isEqual(result[i], ancestorItem)) {
151
- result[i] = theirItem;
152
- }
348
+ mergeByKeyField(ancestor, ours, theirs, keyField, attribute, parent) {
349
+ const finalArray = [];
350
+ let caseCode = 0;
351
+ if (ancestor.length !== 0) {
352
+ caseCode += 100;
353
+ }
354
+ if (ours.length !== 0) {
355
+ caseCode += 10;
356
+ }
357
+ if (theirs.length !== 0) {
358
+ caseCode += 1;
359
+ }
360
+ // console.info(
361
+ // 'attribute: ' +
362
+ // attribute +
363
+ // '\nkeyField: ' +
364
+ // keyField +
365
+ // '\ncaseCode: ' +
366
+ // caseCode
367
+ // )
368
+ // console.dir(ours, {depth: null})
369
+ const keyedAnc = keyBy(ancestor, keyField);
370
+ const keyedOurs = keyBy(ours, keyField);
371
+ const keyedTheirs = keyBy(theirs, keyField);
372
+ const allKeys = new Set([
373
+ ...Object.keys(keyedAnc),
374
+ ...Object.keys(keyedOurs),
375
+ ...Object.keys(keyedTheirs),
376
+ ].sort());
377
+ for (const key of allKeys) {
378
+ caseCode = 0;
379
+ if (keyedAnc[key]) {
380
+ caseCode += 100;
381
+ }
382
+ if (keyedOurs[key]) {
383
+ caseCode += 10;
384
+ }
385
+ if (keyedTheirs[key]) {
386
+ caseCode += 1;
387
+ }
388
+ // console.log('caseCode: ' + caseCode);
389
+ let propObject = {};
390
+ switch (caseCode) {
391
+ case 1:
392
+ propObject[attribute] = [
393
+ ...this.mergeObjects({}, {}, keyedTheirs[key], parent),
394
+ ];
395
+ finalArray.push(propObject);
396
+ break;
397
+ case 10:
398
+ propObject[attribute] = [
399
+ ...this.mergeObjects({}, {}, keyedOurs[key], parent),
400
+ ];
401
+ finalArray.push(propObject);
402
+ break;
403
+ case 100:
404
+ break;
405
+ case 11:
406
+ if (isEqual(ours, theirs)) {
407
+ propObject[attribute] = [
408
+ ...this.mergeObjects({}, {}, keyedOurs[key], parent),
409
+ ];
410
+ finalArray.push(propObject);
411
+ }
412
+ else {
413
+ // finalArray.push({ '#text': '<<<<<<< LOCAL' })
414
+ // propObject[attribute] = [
415
+ // ...this.mergeObjects({}, {}, keyedOurs[key], parent),
416
+ // ]
417
+ // finalArray.push(propObject)
418
+ // finalArray.push({ '#text': '||||||| BASE' })
419
+ // finalArray.push({ '#text': '\n' })
420
+ // finalArray.push({ '#text': '=======' })
421
+ // propObject[attribute] = [
422
+ // ...this.mergeObjects({}, {}, keyedTheirs[key], parent),
423
+ // ]
424
+ // finalArray.push(propObject)
425
+ // finalArray.push({ '#text': '>>>>>>> REMOTE' })
426
+ propObject[attribute] = [
427
+ ...this.mergeObjects({}, keyedOurs[key], keyedTheirs[key], parent),
428
+ ];
429
+ finalArray.push(propObject);
430
+ }
431
+ break;
432
+ case 101:
433
+ if (!isEqual(ancestor, theirs)) {
434
+ finalArray.push({ '#text': '\n<<<<<<< LOCAL' });
435
+ finalArray.push({ '#text': '\n' });
436
+ finalArray.push({ '#text': '||||||| BASE' });
437
+ propObject = {};
438
+ propObject[attribute] = [
439
+ ...this.mergeObjects({}, {}, keyedAnc[key], parent),
440
+ ];
441
+ finalArray.push(propObject);
442
+ finalArray.push({ '#text': '=======' });
443
+ propObject = {};
444
+ propObject[attribute] = [
445
+ ...this.mergeObjects({}, {}, keyedTheirs[key], parent),
446
+ ];
447
+ finalArray.push(propObject);
448
+ finalArray.push({ '#text': '>>>>>>> REMOTE' });
449
+ // propObject[attribute] = [
450
+ // ...this.mergeObjects(keyedAnc[key], {}, keyedTheirs[key], parent),
451
+ // ]
452
+ // finalArray.push(propObject)
453
+ }
454
+ break;
455
+ case 110:
456
+ if (!isEqual(ancestor, ours)) {
457
+ finalArray.push({ '#text': '\n<<<<<<< LOCAL' });
458
+ propObject = {};
459
+ propObject[attribute] = [
460
+ ...this.mergeObjects({}, {}, keyedOurs[key], parent),
461
+ ];
462
+ finalArray.push(propObject);
463
+ finalArray.push({ '#text': '||||||| BASE' });
464
+ propObject = {};
465
+ propObject[attribute] = [
466
+ ...this.mergeObjects({}, {}, keyedAnc[key], parent),
467
+ ];
468
+ finalArray.push(propObject);
469
+ finalArray.push({ '#text': '=======' });
470
+ finalArray.push({ '#text': '\n' });
471
+ finalArray.push({ '#text': '>>>>>>> REMOTE' });
472
+ // propObject[attribute] = [
473
+ // ...this.mergeObjects(keyedAnc[key], keyedOurs[key], {}, parent),
474
+ // ]
475
+ // finalArray.push(propObject)
476
+ }
477
+ break;
478
+ case 111:
479
+ if (isEqual(ours, theirs)) {
480
+ propObject[attribute] = [
481
+ ...this.mergeObjects({}, {}, keyedOurs[key], parent),
482
+ ];
483
+ }
484
+ else if (isEqual(ancestor, ours)) {
485
+ propObject[attribute] = [
486
+ ...this.mergeObjects({}, {}, keyedTheirs[key], parent),
487
+ ];
488
+ }
489
+ else if (isEqual(ancestor, theirs)) {
490
+ propObject[attribute] = [
491
+ ...this.mergeObjects({}, {}, keyedOurs[key], parent),
492
+ ];
493
+ }
494
+ else {
495
+ // finalArray.push({ '#text': '<<<<<<< LOCAL' })
496
+ // finalArray.push(...this.mergeObjects({}, {}, keyedOurs[key], parent))
497
+ // finalArray.push({ '#text': '||||||| BASE' })
498
+ // finalArray.push(...this.mergeObjects({}, {}, keyedAnc[key], parent))
499
+ // finalArray.push({ '#text': '=======' })
500
+ // finalArray.push(...this.mergeObjects({}, {}, keyedTheirs[key], parent))
501
+ // finalArray.push({ '#text': '>>>>>>> REMOTE' })
502
+ propObject[attribute] = [
503
+ ...this.mergeObjects(keyedAnc[key], keyedOurs[key], keyedTheirs[key], parent),
504
+ ];
505
+ }
506
+ finalArray.push(propObject);
507
+ break;
508
+ default:
153
509
  }
154
510
  }
155
- // Add items that only exist in their version
156
- const uniqueTheirItems = differenceWith(Array.from(theirMap.values()), result, (a, b) => this.getItemKey(a, keyField) === this.getItemKey(b, keyField));
157
- result.push(...uniqueTheirItems);
158
- return result;
159
- }
160
- /**
161
- * Gets the key value for an item using the specified key field
162
- */
163
- getItemKey(item, keyField) {
164
- if (typeof item === 'object' &&
165
- item !== null &&
166
- !Array.isArray(item) &&
167
- keyField in item) {
168
- return String(item[keyField]);
169
- }
170
- return undefined;
511
+ return finalArray;
512
+ // original by scolladon
513
+ // const result = [...ours]
514
+ // const processed = new Set<string>()
515
+ // // Create maps for efficient lookups
516
+ // const ourMap = new Map<string, JsonValue>()
517
+ // const theirMap = new Map<string, JsonValue>()
518
+ // const ancestorMap = new Map<string, JsonValue>()
519
+ // // Populate maps
520
+ // for (const item of ours) {
521
+ // const key = this.getItemKey(item, keyField)
522
+ // if (key) ourMap.set(key, item)
523
+ // }
524
+ // for (const item of theirs) {
525
+ // const key = this.getItemKey(item, keyField)
526
+ // if (key) theirMap.set(key, item)
527
+ // }
528
+ // for (const item of ancestor) {
529
+ // const key = this.getItemKey(item, keyField)
530
+ // if (key) ancestorMap.set(key, item)
531
+ // }
532
+ // // Process items in our version
533
+ // for (let i = 0; i < result.length; i++) {
534
+ // const key = this.getItemKey(result[i], keyField)
535
+ // if (!key) continue
536
+ // processed.add(key)
537
+ // // If item exists in both versions
538
+ // if (theirMap.has(key)) {
539
+ // const theirItem = theirMap.get(key)!
540
+ // const ancestorItem = ancestorMap.get(key)
541
+ // // If they changed it from ancestor but we didn't, use their version
542
+ // if (
543
+ // !isEqual(theirItem, ancestorItem) &&
544
+ // isEqual(result[i], ancestorItem)
545
+ // ) {
546
+ // result[i] = theirItem
547
+ // }
548
+ // }
549
+ // }
550
+ // // Add items that only exist in their version
551
+ // const uniqueTheirItems = differenceWith(
552
+ // Array.from(theirMap.values()),
553
+ // result,
554
+ // (a, b) => this.getItemKey(a, keyField) === this.getItemKey(b, keyField)
555
+ // )
556
+ // result.push(...uniqueTheirItems)
557
+ // return result
171
558
  }
172
559
  }
173
560
  //# sourceMappingURL=JsonMerger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JsonMerger.js","sourceRoot":"","sources":["../../src/merger/JsonMerger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JsonMerger.js","sourceRoot":"","sources":["../../src/merger/JsonMerger.ts"],"names":[],"mappings":"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"}
@@ -2,39 +2,54 @@ import { XMLBuilder, XMLParser } from 'fast-xml-parser';
2
2
  import { JsonMerger } from './JsonMerger.js';
3
3
  const XML_DECL = '<?xml version="1.0" encoding="UTF-8"?>\n';
4
4
  const XML_COMMENT_PROP_NAME = '#xml__comment';
5
- const parserOptions = {
5
+ const baseOptions = {
6
+ cdataPropName: '__cdata',
6
7
  commentPropName: XML_COMMENT_PROP_NAME,
7
8
  ignoreAttributes: false,
8
- ignoreNameSpace: false,
9
+ };
10
+ const parserOptions = {
11
+ ...baseOptions,
12
+ ignoreDeclaration: true,
9
13
  numberParseOptions: { leadingZeros: false, hex: false },
10
14
  parseAttributeValue: false,
11
- parseNodeValue: false,
12
15
  parseTagValue: false,
13
- processEntities: false,
14
- trimValues: true,
16
+ // preserveOrder: true,
15
17
  };
16
18
  const builderOptions = {
17
- ...parserOptions,
19
+ ...baseOptions,
18
20
  format: true,
19
21
  indentBy: ' ',
20
- suppressBooleanAttributes: false,
21
- suppressEmptyNode: false,
22
+ preserveOrder: true,
22
23
  };
23
24
  const correctComments = (xml) => xml.includes('<!--') ? xml.replace(/\s+<!--(.*?)-->\s+/g, '<!--$1-->') : xml;
24
- const handleSpecialEntities = (xml) => xml.replaceAll('&amp;#160;', '&#160;');
25
+ const correctConflictIndent = (xml) => xml
26
+ .replace(/[ \t]+(<<<<<<<|\|\|\|\|\|\|\||=======|>>>>>>>)/g, '$1')
27
+ .replace(/^[ \t]*[\n\r]+/gm, '');
28
+ const handleSpecialEntities = (xml) => xml
29
+ .replaceAll('&amp;#160;', '&#160;')
30
+ .replaceAll('&lt;&lt;&lt;&lt;&lt;&lt;&lt;', '<<<<<<<')
31
+ .replaceAll('&gt;&gt;&gt;&gt;&gt;&gt;&gt;', '>>>>>>>');
25
32
  export class XmlMerger {
26
33
  tripartXmlMerge(ancestorContent, ourContent, theirContent) {
27
34
  const parser = new XMLParser(parserOptions);
28
35
  const ancestorObj = parser.parse(ancestorContent);
29
36
  const ourObj = parser.parse(ourContent);
30
37
  const theirObj = parser.parse(theirContent);
38
+ // console.log('ancestorObj ' + typeof ancestorObj)
39
+ // console.dir(ancestorObj, {depth:null})
31
40
  // Perform deep merge of XML objects
32
41
  const jsonMerger = new JsonMerger();
33
42
  const mergedObj = jsonMerger.mergeObjects(ancestorObj, ourObj, theirObj);
43
+ // console.log('mergedObj')
44
+ // console.dir(mergedObj, {depth:null})
34
45
  // Convert back to XML and format
35
46
  const builder = new XMLBuilder(builderOptions);
36
47
  const mergedXml = builder.build(mergedObj);
37
- return correctComments(XML_DECL.concat(handleSpecialEntities(mergedXml)));
48
+ // console.log('mergedXml')
49
+ // console.dir(mergedXml, {depth:null})
50
+ return mergedXml.length
51
+ ? correctConflictIndent(correctComments(XML_DECL.concat(handleSpecialEntities(mergedXml))))
52
+ : '';
38
53
  }
39
54
  }
40
55
  //# sourceMappingURL=XmlMerger.js.map
@@ -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,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,QAAQ,GAAG,0CAA0C,CAAA;AAC3D,MAAM,qBAAqB,GAAG,eAAe,CAAA;AAE7C,MAAM,aAAa,GAAG;IACpB,eAAe,EAAE,qBAAqB;IACtC,gBAAgB,EAAE,KAAK;IACvB,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;IACvD,mBAAmB,EAAE,KAAK;IAC1B,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,KAAK;IACpB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,IAAI;CACjB,CAAA;AAED,MAAM,cAAc,GAAG;IACrB,GAAG,aAAa;IAChB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,MAAM;IAChB,yBAAyB,EAAE,KAAK;IAChC,iBAAiB,EAAE,KAAK;CACzB,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,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;AAExC,MAAM,OAAO,SAAS;IACpB,eAAe,CACb,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;QAEpC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;QACnC,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAExE,iCAAiC;QACjC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAA;QAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC1C,OAAO,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC3E,CAAC;CACF"}
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,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;CACxB,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;IACpB,eAAe,CACb,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;QAC3C,mDAAmD;QACnD,yCAAyC;QAEzC,oCAAoC;QAEpC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;QACnC,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QACxE,2BAA2B;QAC3B,uCAAuC;QAEvC,iCAAiC;QACjC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAA;QAC9C,MAAM,SAAS,GAAW,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAClD,2BAA2B;QAC3B,uCAAuC;QACvC,OAAO,SAAS,CAAC,MAAM;YACrB,CAAC,CAAC,qBAAqB,CACnB,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CACnE;YACH,CAAC,CAAC,EAAE,CAAA;IACR,CAAC;CACF"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "sf-git-merge-driver",
3
- "version": "1.0.0-dev-3.13989111458-1",
3
+ "version": "1.0.0-dev-3.13990488196-1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "sf-git-merge-driver",
9
- "version": "1.0.0-dev-3.13989111458-1",
9
+ "version": "1.0.0-dev-3.13990488196-1",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@oclif/core": "^4.2.10",
@@ -4027,9 +4027,9 @@
4027
4027
  }
4028
4028
  },
4029
4029
  "node_modules/@salesforce/core": {
4030
- "version": "8.8.5",
4031
- "resolved": "https://registry.npmjs.org/@salesforce/core/-/core-8.8.5.tgz",
4032
- "integrity": "sha512-eCiiO4NptvKkz04A4ivBVLzEBy/6IIFmaXoZ4tnF1FcD5MESvC+Xuc+0RFSRiYmPi5oloKNl6njrfVCKAho2zQ==",
4030
+ "version": "8.8.6",
4031
+ "resolved": "https://registry.npmjs.org/@salesforce/core/-/core-8.8.6.tgz",
4032
+ "integrity": "sha512-RQK7iUvOv579qZkz93DtXOTFY6HZrOF1iJB5JntnzzmWgKXwdeRdoyIYlLksrDp0vkNtjtNTZZz+IJY4x6eCig==",
4033
4033
  "license": "BSD-3-Clause",
4034
4034
  "dependencies": {
4035
4035
  "@jsforce/jsforce-node": "^3.6.5",
@@ -4078,16 +4078,16 @@
4078
4078
  "license": "ISC"
4079
4079
  },
4080
4080
  "node_modules/@salesforce/sf-plugins-core": {
4081
- "version": "12.2.0",
4082
- "resolved": "https://registry.npmjs.org/@salesforce/sf-plugins-core/-/sf-plugins-core-12.2.0.tgz",
4083
- "integrity": "sha512-aGNk74rMt8I+HTP7hRsX6kxiGTuun9ONrWkX7JvWDdtIoO9TsEbNVZENH8GFxHFalWPFCj31IMUQD/bGbxMFbg==",
4081
+ "version": "12.2.1",
4082
+ "resolved": "https://registry.npmjs.org/@salesforce/sf-plugins-core/-/sf-plugins-core-12.2.1.tgz",
4083
+ "integrity": "sha512-b3eRSzGO0weBLL1clHaJNgNP1aKkD1Qy2DQEc0ieteEm+fh1FfPA0QpJ9rh/hdmkJRip2x2R2zz9tflJ0wflbg==",
4084
4084
  "license": "BSD-3-Clause",
4085
4085
  "dependencies": {
4086
4086
  "@inquirer/confirm": "^3.1.22",
4087
4087
  "@inquirer/password": "^2.2.0",
4088
- "@oclif/core": "^4.2.4",
4088
+ "@oclif/core": "^4.2.10",
4089
4089
  "@oclif/table": "^0.4.6",
4090
- "@salesforce/core": "^8.5.1",
4090
+ "@salesforce/core": "^8.8.5",
4091
4091
  "@salesforce/kit": "^3.2.3",
4092
4092
  "@salesforce/ts-types": "^2.0.12",
4093
4093
  "ansis": "^3.3.2",
@@ -248,5 +248,5 @@
248
248
  ]
249
249
  }
250
250
  },
251
- "version": "1.0.0-dev-3.13989111458-1"
251
+ "version": "1.0.0-dev-3.13990488196-1"
252
252
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sf-git-merge-driver",
3
3
  "description": "git remote add origin git@github.com:scolladon/sf-git-merge-driver.git",
4
- "version": "1.0.0-dev-3.13989111458-1",
4
+ "version": "1.0.0-dev-3.13990488196-1",
5
5
  "exports": "./lib/driver/MergeDriver.js",
6
6
  "type": "module",
7
7
  "author": "Sébastien Colladon (colladonsebastien@gmail.com)",