sf-git-merge-driver 1.0.0-dev-3.13838689861-1 → 1.0.0-dev-3.13895680899-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.13838689861-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.13895680899-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.13838689861-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.13895680899-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.13838689861-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.13895680899-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
- private readonly idFields;
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
- private hasIdField;
12
- private createIdMap;
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 {};
@@ -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
- idFields = [
3
- 'fullName',
4
- 'name',
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 null/undefined cases
12
- if (ours === null || theirs === null)
13
- return ours ?? theirs;
14
- if (typeof ours !== typeof theirs)
15
- return ours;
16
- // Handle arrays (special case for Salesforce metadata)
17
- if (Array.isArray(ours) && Array.isArray(theirs)) {
18
- return this.mergeArrays(Array.isArray(ancestor) ? ancestor : undefined, ours, theirs);
19
- }
20
- // Handle objects
21
- if (typeof ours === 'object' && typeof theirs === 'object') {
22
- const result = { ...ours };
23
- const ancestorObj = (ancestor ?? {});
24
- const theirsObj = theirs;
25
- // Process all keys from both objects
26
- const allKeys = new Set([...Object.keys(ours), ...Object.keys(theirs)]);
27
- for (const key of allKeys) {
28
- if (!(key in theirsObj))
29
- continue; // Keep our version
30
- if (!(key in result)) {
31
- result[key] = theirsObj[key]; // Take their version
32
- continue;
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
- // Recursively merge when both have the key
35
- result[key] = this.mergeObjects(ancestorObj[key], result[key], theirsObj[key]);
55
+ result[baseKey] = mergedContent;
56
+ return result;
36
57
  }
37
- return result;
38
58
  }
39
- // For primitive values, use their changes if we didn't modify from ancestor
40
- if (theirs !== ancestor && ours === ancestor)
41
- return theirs;
42
- return ours; // Default to our version
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
- mergeArrays(ancestor, ours, theirs) {
45
- // Find the first matching ID field that exists in both arrays
46
- const idField = this.idFields.find(field => ours.some(item => this.hasIdField(item, field)) &&
47
- theirs.some(item => this.hasIdField(item, field)));
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
- const processed = new Set();
58
- // Process all items from both arrays
59
- for (const [id, ourItem] of ourMap) {
60
- const theirItem = theirMap.get(id);
61
- if (theirItem) {
62
- // Item exists in both versions, merge them
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
- for (const [id, theirItem] of theirMap) {
72
- if (!processed.has(id)) {
73
- result.push(theirItem);
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
- hasIdField(item, field) {
79
- return (item !== null &&
80
- typeof item === 'object' &&
81
- !Array.isArray(item) &&
82
- field in item);
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
- createIdMap(arr, idField) {
85
- return new Map(arr
86
- .filter(item => this.hasIdField(item, idField))
87
- .map(item => [String(item[idField]), item]));
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":"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"}
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
- const content = ['*.xml'].map(pattern => `${pattern} merge=${DRIVER_NAME}`).join('\n') +
11
- '\n';
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;AAE/E,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,MAAM,OAAO,GACX,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,UAAU,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACtE,IAAI,CAAA;QAEN,MAAM,UAAU,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;IAC5D,CAAC;CACF"}
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
- const MERGE_DRIVER_CONFIG = new RegExp(`.* merge\\s*=\\s*${DRIVER_NAME}$`);
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"}