sf-git-merge-driver 1.0.0-dev-3.13838689861-1 → 1.0.0-dev-3.13895420506-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 +3 -3
- package/lib/constant/metadataConstant.d.ts +54 -0
- package/lib/constant/metadataConstant.js +68 -0
- package/lib/constant/metadataConstant.js.map +1 -0
- package/lib/merger/JsonMerger.d.ts +26 -3
- package/lib/merger/JsonMerger.js +155 -72
- package/lib/merger/JsonMerger.js.map +1 -1
- package/lib/service/installService.js +4 -2
- package/lib/service/installService.js.map +1 -1
- package/lib/service/uninstallService.js +2 -1
- package/lib/service/uninstallService.js.map +1 -1
- package/npm-shrinkwrap.json +9 -2
- package/oclif.manifest.json +1 -1
- package/package.json +2 -1
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.
|
|
50
|
+
_See code: [src/commands/git/merge/driver/install.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.0.0-dev-3.13895420506-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.
|
|
88
|
+
_See code: [src/commands/git/merge/driver/run.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.0.0-dev-3.13895420506-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.
|
|
115
|
+
_See code: [src/commands/git/merge/driver/uninstall.ts](https://github.com/scolladon/sf-git-merge-driver/blob/v1.0.0-dev-3.13895420506-1/src/commands/git/merge/driver/uninstall.ts)_
|
|
116
116
|
<!-- commandsstop -->
|
|
117
117
|
|
|
118
118
|
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export declare const KEY_FIELD_METADATA: {
|
|
2
|
+
marketingAppExtActivities: string;
|
|
3
|
+
alerts: string;
|
|
4
|
+
fieldUpdates: string;
|
|
5
|
+
flowActions: string;
|
|
6
|
+
outboundMessages: string;
|
|
7
|
+
rules: string;
|
|
8
|
+
knowledgePublishes: string;
|
|
9
|
+
tasks: string;
|
|
10
|
+
send: string;
|
|
11
|
+
sharingCriteriaRules: string;
|
|
12
|
+
sharingGuestRules: string;
|
|
13
|
+
sharingOwnerRules: string;
|
|
14
|
+
sharingTerritoryRules: string;
|
|
15
|
+
assignmentRule: string;
|
|
16
|
+
autoResponseRule: string;
|
|
17
|
+
escalationRule: string;
|
|
18
|
+
matchingRules: string;
|
|
19
|
+
valueTranslation: string;
|
|
20
|
+
categoryGroupVisibilities: string;
|
|
21
|
+
applicationVisibilities: string;
|
|
22
|
+
classAccesses: string;
|
|
23
|
+
customMetadataTypeAccesses: string;
|
|
24
|
+
customPermissions: string;
|
|
25
|
+
customSettingAccesses: string;
|
|
26
|
+
externalDataSourceAccesses: string;
|
|
27
|
+
fieldPermissions: string;
|
|
28
|
+
flowAccesses: string;
|
|
29
|
+
loginFlows: string;
|
|
30
|
+
layoutAssignments: string;
|
|
31
|
+
loginHours: string;
|
|
32
|
+
loginIpRanges: string;
|
|
33
|
+
objectPermissions: string;
|
|
34
|
+
pageAccesses: string;
|
|
35
|
+
profileActionOverrides: string;
|
|
36
|
+
recordTypeVisibilities: string;
|
|
37
|
+
tabVisibilities: string;
|
|
38
|
+
userPermissions: string;
|
|
39
|
+
bots: string;
|
|
40
|
+
customApplications: string;
|
|
41
|
+
customLabels: string;
|
|
42
|
+
customPageWebLinks: string;
|
|
43
|
+
customTabs: string;
|
|
44
|
+
flowDefinitions: string;
|
|
45
|
+
pipelineInspMetricConfigs: string;
|
|
46
|
+
prompts: string;
|
|
47
|
+
quickActions: string;
|
|
48
|
+
reportTypes: string;
|
|
49
|
+
scontrols: string;
|
|
50
|
+
standardValue: string;
|
|
51
|
+
customValue: string;
|
|
52
|
+
labels: string;
|
|
53
|
+
};
|
|
54
|
+
export declare const METADATA_TYPES_PATTERNS: string[];
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export const KEY_FIELD_METADATA = {
|
|
2
|
+
marketingAppExtActivities: 'fullName',
|
|
3
|
+
alerts: 'fullName',
|
|
4
|
+
fieldUpdates: 'fullName',
|
|
5
|
+
flowActions: 'fullName',
|
|
6
|
+
outboundMessages: 'fullName',
|
|
7
|
+
rules: 'fullName',
|
|
8
|
+
knowledgePublishes: 'fullName',
|
|
9
|
+
tasks: 'fullName',
|
|
10
|
+
send: 'fullName',
|
|
11
|
+
sharingCriteriaRules: 'fullName',
|
|
12
|
+
sharingGuestRules: 'fullName',
|
|
13
|
+
sharingOwnerRules: 'fullName',
|
|
14
|
+
sharingTerritoryRules: 'fullName',
|
|
15
|
+
assignmentRule: 'fullName',
|
|
16
|
+
autoResponseRule: 'fullName',
|
|
17
|
+
escalationRule: 'fullName',
|
|
18
|
+
matchingRules: 'fullName',
|
|
19
|
+
valueTranslation: 'masterLabel',
|
|
20
|
+
categoryGroupVisibilities: 'dataCategoryGroup',
|
|
21
|
+
applicationVisibilities: 'application',
|
|
22
|
+
classAccesses: 'apexClass',
|
|
23
|
+
customMetadataTypeAccesses: 'name',
|
|
24
|
+
customPermissions: 'name',
|
|
25
|
+
customSettingAccesses: 'name',
|
|
26
|
+
externalDataSourceAccesses: 'externalDataSource',
|
|
27
|
+
fieldPermissions: 'field',
|
|
28
|
+
flowAccesses: 'flow',
|
|
29
|
+
loginFlows: 'friendlyname',
|
|
30
|
+
layoutAssignments: '<object>',
|
|
31
|
+
loginHours: '<array>',
|
|
32
|
+
loginIpRanges: '<array>',
|
|
33
|
+
objectPermissions: 'object',
|
|
34
|
+
pageAccesses: 'apexPage',
|
|
35
|
+
profileActionOverrides: 'actionName',
|
|
36
|
+
recordTypeVisibilities: 'recordType',
|
|
37
|
+
tabVisibilities: 'tab',
|
|
38
|
+
userPermissions: 'name',
|
|
39
|
+
bots: 'fullName',
|
|
40
|
+
customApplications: 'name',
|
|
41
|
+
customLabels: 'name',
|
|
42
|
+
customPageWebLinks: 'name',
|
|
43
|
+
customTabs: 'name',
|
|
44
|
+
flowDefinitions: 'fullName',
|
|
45
|
+
pipelineInspMetricConfigs: 'name',
|
|
46
|
+
prompts: 'name',
|
|
47
|
+
quickActions: 'name',
|
|
48
|
+
reportTypes: 'name',
|
|
49
|
+
scontrols: 'name',
|
|
50
|
+
standardValue: 'fullName',
|
|
51
|
+
customValue: 'fullName',
|
|
52
|
+
labels: 'fullName',
|
|
53
|
+
};
|
|
54
|
+
export const METADATA_TYPES_PATTERNS = [
|
|
55
|
+
'assignmentRules',
|
|
56
|
+
'autoResponseRules',
|
|
57
|
+
'escalationRules',
|
|
58
|
+
'globalValueSet',
|
|
59
|
+
'globalValueSetTranslation',
|
|
60
|
+
'marketingappextension',
|
|
61
|
+
'matchingRule',
|
|
62
|
+
'profile',
|
|
63
|
+
'sharingRules',
|
|
64
|
+
'standardValueSet',
|
|
65
|
+
'standardValueSetTranslation',
|
|
66
|
+
'workflow',
|
|
67
|
+
];
|
|
68
|
+
//# sourceMappingURL=metadataConstant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadataConstant.js","sourceRoot":"","sources":["../../src/constant/metadataConstant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,yBAAyB,EAAE,UAAU;IACrC,MAAM,EAAE,UAAU;IAClB,YAAY,EAAE,UAAU;IACxB,WAAW,EAAE,UAAU;IACvB,gBAAgB,EAAE,UAAU;IAC5B,KAAK,EAAE,UAAU;IACjB,kBAAkB,EAAE,UAAU;IAC9B,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU;IAChB,oBAAoB,EAAE,UAAU;IAChC,iBAAiB,EAAE,UAAU;IAC7B,iBAAiB,EAAE,UAAU;IAC7B,qBAAqB,EAAE,UAAU;IACjC,cAAc,EAAE,UAAU;IAC1B,gBAAgB,EAAE,UAAU;IAC5B,cAAc,EAAE,UAAU;IAC1B,aAAa,EAAE,UAAU;IACzB,gBAAgB,EAAE,aAAa;IAC/B,yBAAyB,EAAE,mBAAmB;IAC9C,uBAAuB,EAAE,aAAa;IACtC,aAAa,EAAE,WAAW;IAC1B,0BAA0B,EAAE,MAAM;IAClC,iBAAiB,EAAE,MAAM;IACzB,qBAAqB,EAAE,MAAM;IAC7B,0BAA0B,EAAE,oBAAoB;IAChD,gBAAgB,EAAE,OAAO;IACzB,YAAY,EAAE,MAAM;IACpB,UAAU,EAAE,cAAc;IAC1B,iBAAiB,EAAE,UAAU;IAC7B,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,SAAS;IACxB,iBAAiB,EAAE,QAAQ;IAC3B,YAAY,EAAE,UAAU;IACxB,sBAAsB,EAAE,YAAY;IACpC,sBAAsB,EAAE,YAAY;IACpC,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,MAAM;IACvB,IAAI,EAAE,UAAU;IAChB,kBAAkB,EAAE,MAAM;IAC1B,YAAY,EAAE,MAAM;IACpB,kBAAkB,EAAE,MAAM;IAC1B,UAAU,EAAE,MAAM;IAClB,eAAe,EAAE,UAAU;IAC3B,yBAAyB,EAAE,MAAM;IACjC,OAAO,EAAE,MAAM;IACf,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,MAAM;IACjB,aAAa,EAAE,UAAU;IACzB,WAAW,EAAE,UAAU;IACvB,MAAM,EAAE,UAAU;CACnB,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,gBAAgB;IAChB,2BAA2B;IAC3B,uBAAuB;IACvB,cAAc;IACd,SAAS;IACT,cAAc;IACd,kBAAkB;IAClB,6BAA6B;IAC7B,UAAU;CACX,CAAA"}
|
|
@@ -5,10 +5,33 @@ interface JsonObject {
|
|
|
5
5
|
interface JsonArray extends Array<JsonValue> {
|
|
6
6
|
}
|
|
7
7
|
export declare class JsonMerger {
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Main entry point for merging JSON values
|
|
10
|
+
*/
|
|
9
11
|
mergeObjects(ancestor: JsonValue | undefined, ours: JsonValue, theirs: JsonValue): JsonValue;
|
|
12
|
+
/**
|
|
13
|
+
* Ensures a value is an array
|
|
14
|
+
*/
|
|
15
|
+
private ensureArray;
|
|
16
|
+
/**
|
|
17
|
+
* Gets the key field for a property from KEY_FIELD_METADATA
|
|
18
|
+
*/
|
|
19
|
+
private getKeyField;
|
|
20
|
+
/**
|
|
21
|
+
* Merges arrays using the specified key field if available
|
|
22
|
+
*/
|
|
10
23
|
private mergeArrays;
|
|
11
|
-
|
|
12
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Merges arrays by position
|
|
26
|
+
*/
|
|
27
|
+
private mergeByPosition;
|
|
28
|
+
/**
|
|
29
|
+
* Merges arrays using a key field
|
|
30
|
+
*/
|
|
31
|
+
private mergeByKeyField;
|
|
32
|
+
/**
|
|
33
|
+
* Gets the key value for an item using the specified key field
|
|
34
|
+
*/
|
|
35
|
+
private getItemKey;
|
|
13
36
|
}
|
|
14
37
|
export {};
|
package/lib/merger/JsonMerger.js
CHANGED
|
@@ -1,90 +1,173 @@
|
|
|
1
|
+
import { castArray, differenceWith, isEqual, isNil, unionWith } from 'lodash-es';
|
|
2
|
+
import { KEY_FIELD_METADATA } from '../constant/metadataConstant.js';
|
|
1
3
|
export class JsonMerger {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
'field',
|
|
6
|
-
'label',
|
|
7
|
-
'id',
|
|
8
|
-
'@_name',
|
|
9
|
-
];
|
|
4
|
+
/**
|
|
5
|
+
* Main entry point for merging JSON values
|
|
6
|
+
*/
|
|
10
7
|
mergeObjects(ancestor, ours, theirs) {
|
|
11
|
-
// Handle
|
|
12
|
-
if (ours ===
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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;
|
|
43
|
+
}
|
|
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);
|
|
33
54
|
}
|
|
34
|
-
|
|
35
|
-
|
|
55
|
+
result[baseKey] = mergedContent;
|
|
56
|
+
return result;
|
|
36
57
|
}
|
|
37
|
-
return result;
|
|
38
58
|
}
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
59
|
+
// Default to our version for other cases
|
|
60
|
+
return ours;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Ensures a value is an array
|
|
64
|
+
*/
|
|
65
|
+
ensureArray(value) {
|
|
66
|
+
return isNil(value) ? [] : castArray(value);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Gets the key field for a property from KEY_FIELD_METADATA
|
|
70
|
+
*/
|
|
71
|
+
getKeyField(property) {
|
|
72
|
+
return property in KEY_FIELD_METADATA
|
|
73
|
+
? KEY_FIELD_METADATA[property]
|
|
74
|
+
: undefined;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Merges arrays using the specified key field if available
|
|
78
|
+
*/
|
|
79
|
+
mergeArrays(ancestor, ours, theirs, keyField) {
|
|
80
|
+
// If no key field, use unionWith to merge arrays without duplicates
|
|
81
|
+
if (!keyField) {
|
|
82
|
+
return unionWith([...ours], theirs, isEqual);
|
|
83
|
+
}
|
|
84
|
+
// Special case for array position
|
|
85
|
+
if (keyField === '<array>') {
|
|
86
|
+
return this.mergeByPosition(ancestor, ours, theirs);
|
|
87
|
+
}
|
|
88
|
+
// Merge using key field
|
|
89
|
+
return this.mergeByKeyField(ancestor, ours, theirs, keyField);
|
|
43
90
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (!idField)
|
|
49
|
-
return ours; // No common identifier, keep our version
|
|
50
|
-
// Create lookup maps
|
|
51
|
-
const ourMap = this.createIdMap(ours, idField);
|
|
52
|
-
const theirMap = this.createIdMap(theirs, idField);
|
|
53
|
-
const ancestorMap = ancestor
|
|
54
|
-
? this.createIdMap(ancestor, idField)
|
|
55
|
-
: new Map();
|
|
91
|
+
/**
|
|
92
|
+
* Merges arrays by position
|
|
93
|
+
*/
|
|
94
|
+
mergeByPosition(ancestor, ours, theirs) {
|
|
56
95
|
const result = [...ours];
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
const index = result.findIndex(item => this.hasIdField(item, idField) && item[idField] === id);
|
|
64
|
-
if (index !== -1) {
|
|
65
|
-
result[index] = this.mergeObjects(ancestorMap.get(id), ourItem, theirItem);
|
|
66
|
-
}
|
|
96
|
+
// Merge items at the same positions
|
|
97
|
+
for (let i = 0; i < Math.min(ours.length, theirs.length); i++) {
|
|
98
|
+
const ancestorItem = i < ancestor.length ? ancestor[i] : undefined;
|
|
99
|
+
// If they changed it from ancestor but we didn't, use their version
|
|
100
|
+
if (!isEqual(theirs[i], ancestorItem) && isEqual(ours[i], ancestorItem)) {
|
|
101
|
+
result[i] = theirs[i];
|
|
67
102
|
}
|
|
68
|
-
processed.add(id);
|
|
69
103
|
}
|
|
70
104
|
// Add items that only exist in their version
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
result.push(
|
|
105
|
+
if (theirs.length > ours.length) {
|
|
106
|
+
for (let i = ours.length; i < theirs.length; i++) {
|
|
107
|
+
result.push(theirs[i]);
|
|
74
108
|
}
|
|
75
109
|
}
|
|
76
110
|
return result;
|
|
77
111
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Merges arrays using a key field
|
|
114
|
+
*/
|
|
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
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
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;
|
|
83
159
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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;
|
|
88
171
|
}
|
|
89
172
|
}
|
|
90
173
|
//# sourceMappingURL=JsonMerger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonMerger.js","sourceRoot":"","sources":["../../src/merger/JsonMerger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"JsonMerger.js","sourceRoot":"","sources":["../../src/merger/JsonMerger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { appendFile } from 'node:fs/promises';
|
|
2
2
|
import { simpleGit } from 'simple-git';
|
|
3
3
|
import { DRIVER_NAME, RUN_PLUGIN_COMMAND } from '../constant/driverConstant.js';
|
|
4
|
+
import { METADATA_TYPES_PATTERNS } from '../constant/metadataConstant.js';
|
|
4
5
|
export class InstallService {
|
|
5
6
|
async installMergeDriver() {
|
|
6
7
|
const git = simpleGit();
|
|
7
8
|
await git.addConfig(`merge.${DRIVER_NAME}.name`, 'Salesforce source merge driver');
|
|
8
9
|
await git.addConfig(`merge.${DRIVER_NAME}.driver`, `${RUN_PLUGIN_COMMAND} --ancestor-file %O --our-file %A --theirs-file %B --output-file %P`);
|
|
9
10
|
await git.addConfig(`merge.${DRIVER_NAME}.recursive`, 'true');
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
// Configure merge driver for each metadata type pattern
|
|
12
|
+
const patterns = METADATA_TYPES_PATTERNS.map(pattern => `*.${pattern}.xml merge=${DRIVER_NAME}`).join('\n');
|
|
13
|
+
const content = `${patterns}\n`;
|
|
12
14
|
await appendFile('.gitattributes', content, { flag: 'a' });
|
|
13
15
|
}
|
|
14
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installService.js","sourceRoot":"","sources":["../../src/service/installService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"installService.js","sourceRoot":"","sources":["../../src/service/installService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAEzE,MAAM,OAAO,cAAc;IAClB,KAAK,CAAC,kBAAkB;QAC7B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;QACvB,MAAM,GAAG,CAAC,SAAS,CACjB,SAAS,WAAW,OAAO,EAC3B,gCAAgC,CACjC,CAAA;QACD,MAAM,GAAG,CAAC,SAAS,CACjB,SAAS,WAAW,SAAS,EAC7B,GAAG,kBAAkB,qEAAqE,CAC3F,CAAA;QACD,MAAM,GAAG,CAAC,SAAS,CAAC,SAAS,WAAW,YAAY,EAAE,MAAM,CAAC,CAAA;QAE7D,wDAAwD;QACxD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,GAAG,CAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO,cAAc,WAAW,EAAE,CACnD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACZ,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,CAAA;QAE/B,MAAM,UAAU,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;IAC5D,CAAC;CACF"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
2
|
import { simpleGit } from 'simple-git';
|
|
3
3
|
import { DRIVER_NAME } from '../constant/driverConstant.js';
|
|
4
|
-
|
|
4
|
+
// This match lines like: "*.profile-meta.xml merge=sf-git-merge-driver"
|
|
5
|
+
const MERGE_DRIVER_CONFIG = new RegExp(`.*\s+merge\s*=\s*${DRIVER_NAME}$`);
|
|
5
6
|
export class UninstallService {
|
|
6
7
|
async uninstallMergeDriver() {
|
|
7
8
|
const git = simpleGit();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstallService.js","sourceRoot":"","sources":["../../src/service/uninstallService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAE3D,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,oBAAoB,WAAW,GAAG,CAAC,CAAA;AAE1E,MAAM,OAAO,gBAAgB;IACpB,KAAK,CAAC,oBAAoB;QAC/B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,kBAAkB,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC,CAAA;YACrE,qEAAqE;QACvE,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE;YACrD,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAA;QACF,MAAM,kBAAkB,GAAG,aAAa;aACrC,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAClD,MAAM,SAAS,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAClE,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"uninstallService.js","sourceRoot":"","sources":["../../src/service/uninstallService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAE3D,wEAAwE;AACxE,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,oBAAoB,WAAW,GAAG,CAAC,CAAA;AAE1E,MAAM,OAAO,gBAAgB;IACpB,KAAK,CAAC,oBAAoB;QAC/B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,kBAAkB,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC,CAAA;YACrE,qEAAqE;QACvE,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE;YACrD,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAA;QACF,MAAM,kBAAkB,GAAG,aAAa;aACrC,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAClD,MAAM,SAAS,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAClE,CAAC;CACF"}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sf-git-merge-driver",
|
|
3
|
-
"version": "1.0.0-dev-3.
|
|
3
|
+
"version": "1.0.0-dev-3.13895420506-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.
|
|
9
|
+
"version": "1.0.0-dev-3.13895420506-1",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@oclif/core": "^4.2.8",
|
|
13
13
|
"@salesforce/core": "^8.8.5",
|
|
14
14
|
"@salesforce/sf-plugins-core": "^12.2.0",
|
|
15
15
|
"fast-xml-parser": "^5.0.8",
|
|
16
|
+
"lodash-es": "^4.17.21",
|
|
16
17
|
"simple-git": "^3.27.0"
|
|
17
18
|
},
|
|
18
19
|
"devDependencies": {
|
|
@@ -10507,6 +10508,12 @@
|
|
|
10507
10508
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
|
10508
10509
|
"license": "MIT"
|
|
10509
10510
|
},
|
|
10511
|
+
"node_modules/lodash-es": {
|
|
10512
|
+
"version": "4.17.21",
|
|
10513
|
+
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
|
|
10514
|
+
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
|
|
10515
|
+
"license": "MIT"
|
|
10516
|
+
},
|
|
10510
10517
|
"node_modules/lodash.flattendeep": {
|
|
10511
10518
|
"version": "4.4.0",
|
|
10512
10519
|
"resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
|
package/oclif.manifest.json
CHANGED
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.
|
|
4
|
+
"version": "1.0.0-dev-3.13895420506-1",
|
|
5
5
|
"exports": "./lib/driver/MergeDriver.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"author": "Sébastien Colladon (colladonsebastien@gmail.com)",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"@salesforce/core": "^8.8.5",
|
|
15
15
|
"@salesforce/sf-plugins-core": "^12.2.0",
|
|
16
16
|
"fast-xml-parser": "^5.0.8",
|
|
17
|
+
"lodash-es": "^4.17.21",
|
|
17
18
|
"simple-git": "^3.27.0"
|
|
18
19
|
},
|
|
19
20
|
"devDependencies": {
|