Skip to content

Commit fe87d7e

Browse files
fix: modify beta2 permset transformer and finalizer - W-18308093 (#1554)
* fix: modify beta2 permset transformer and finalizer * fix: remove snapshot files that should not be there * chore: remove directives, deleting mdapi/force-app on snapshot UT * chore: bump core --------- Co-authored-by: Willie Ruemmele <[email protected]>
1 parent 8a3ffea commit fe87d7e

File tree

50 files changed

+1573
-3842
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+1573
-3842
lines changed

CHANGELOG.md

Lines changed: 510 additions & 1891 deletions
Large diffs are not rendered by default.

METADATA_SUPPORT.md

Lines changed: 693 additions & 695 deletions
Large diffs are not rendered by default.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"node": ">=18.0.0"
2626
},
2727
"dependencies": {
28-
"@salesforce/core": "^8.8.7",
28+
"@salesforce/core": "^8.10.2",
2929
"@salesforce/kit": "^3.2.3",
3030
"@salesforce/ts-types": "^2.0.12",
3131
"@salesforce/types": "^1.3.0",

src/convert/convertContext/decomposedPermissionSetFinalizer.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import { join } from 'node:path';
88
import { ensure, ensureString } from '@salesforce/ts-types';
99
import type { PermissionSet } from '@jsforce/jsforce-node/lib/api/metadata/schema';
10+
import { ensureArray } from '@salesforce/kit';
1011
import { MetadataType } from '../../registry';
1112
import { XML_NS_KEY, XML_NS_URL } from '../../common/constants';
1213
import { JsToXml } from '../streams';
@@ -43,6 +44,23 @@ export class DecomposedPermissionSetFinalizer extends ConvertTransactionFinalize
4344

4445
const agg: WriterFormat[] = [];
4546
this.transactionState.parentToChild.forEach((children, parent) => {
47+
// iterate over children and build PermissionSet data structure
48+
const permset = new Map<string, unknown[]>();
49+
for (const child of children) {
50+
for (const [key, value] of Object.entries(child)) {
51+
const existingEntry = permset.get(key);
52+
if (existingEntry) {
53+
if (Array.isArray(value)) {
54+
permset.set(key, existingEntry.concat(value));
55+
} else {
56+
existingEntry.push(value);
57+
permset.set(key, existingEntry);
58+
}
59+
} else {
60+
permset.set(key, ensureArray<unknown>(value));
61+
}
62+
}
63+
}
4664
agg.push({
4765
component: {
4866
type: ensure(this.permissionSetType, 'DecomposedPermissionSetFinalizer should have set PermissionSetType'),
@@ -55,14 +73,9 @@ export class DecomposedPermissionSetFinalizer extends ConvertTransactionFinalize
5573
`${parent}.permissionset`
5674
),
5775
source: new JsToXml({
58-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
5976
PermissionSet: {
6077
[XML_NS_KEY]: XML_NS_URL,
61-
...Object.assign(
62-
{},
63-
// sort the children by fullName
64-
...Object.values(children.sort((a, b) => ((a.fullName ?? '') > (b.fullName ?? '') ? -1 : 1)))
65-
),
78+
...Object.fromEntries(permset),
6679
},
6780
}),
6881
},

src/convert/transformers/decomposedPermissionSetTransformer.ts

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import { join } from 'node:path';
99
import { AnyJson, ensureString, JsonMap } from '@salesforce/ts-types';
10+
import { ensureArray } from '@salesforce/kit';
1011
import type { PermissionSet } from '@jsforce/jsforce-node/lib/api/metadata/schema';
1112
import { calculateRelativePath } from '../../utils/path';
1213
import { unwrapAndOmitNS } from '../../utils/decomposed';
@@ -95,6 +96,7 @@ export class DecomposedPermissionSetTransformer extends BaseMetadataTransformer
9596
.filter(hasChildTypeId)
9697
.map(addChildType)
9798
.map((child) => toInfoContainer(mergeWith)(component)(child.childType)(child.tagValue as JsonMap))
99+
.flat()
98100
.filter(forceIgnoreAllowsComponent(forceIgnore));
99101

100102
const writeInfosForChildren = combineChildWriteInfos([
@@ -202,20 +204,41 @@ const toInfoContainer =
202204
(mergeWith: SourceComponent | undefined) =>
203205
(parent: SourceComponent) =>
204206
(childType: MetadataType) =>
205-
(tagValue: JsonMap): InfoContainer => {
207+
(tagValue: JsonMap): InfoContainer[] => {
206208
const tagEntry: JsonMap[] = Array.isArray(tagValue) ? tagValue : [tagValue];
207-
const entryName = childType.directoryName
208-
? (tagEntry.at(0)?.[childType.uniqueIdElement!] as string).split('.')[0]
209-
: parent.name;
210-
return {
209+
210+
const buildInfoContainer = (entryName: string, value: JsonMap): InfoContainer => ({
211211
parentComponent: parent,
212212
entryName,
213213
childComponent: {
214214
fullName: `${parent.fullName}.${entryName}`,
215215
type: childType,
216216
parent,
217217
},
218-
value: tagValue,
218+
value,
219219
mergeWith,
220-
};
220+
});
221+
222+
// ObjectSettings, ObjectPermission (object), FieldPermission (field),
223+
// RecordTypeVisibility (recordType), TabSetting (tab)
224+
if (childType.directoryName) {
225+
const infoContainers = new Map<string, InfoContainer>();
226+
tagEntry.map((entry) => {
227+
let entryName = (entry[childType.uniqueIdElement!] as string).split('.')[0];
228+
// If the object name starts with `standard-`, we need to remove the prefix
229+
if (entryName.startsWith('standard-')) {
230+
entryName = entryName.replace('standard-', '');
231+
}
232+
const infoContainer = infoContainers.get(entryName);
233+
if (infoContainer) {
234+
// Add to the value of the existing InfoContainer
235+
// @ts-expect-error this is either JsonMap or JsonArray
236+
infoContainer.value = ensureArray(infoContainer.value).concat(entry);
237+
} else {
238+
infoContainers.set(entryName, buildInfoContainer(entryName, entry));
239+
}
240+
});
241+
return Array.from(infoContainers.values());
242+
}
243+
return [buildInfoContainer(parent.name, tagValue)];
221244
};

test/convert/transformers/decompoedPermissionSetTransformer.test.ts renamed to test/convert/transformers/decomposedPermissionSetTransformer.test.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,18 @@ describe('DecomposedPermissionSetTransformer', () => {
2727
const component = MD_FORMAT_PS;
2828
const xf = new DecomposedPermissionSetTransformer(regAcc);
2929
const result = await xf.toSourceFormat({ component });
30-
expect(result).to.have.length(5);
30+
expect(result).to.have.length(8);
3131
result.map((l) => {
3232
expect(l.output).to.include(join('main', 'default', 'permissionsets'));
3333
});
3434
expect(result[0].output).to.match(/myPS.classAccess-meta.xml$/);
3535
expect(result[1].output).to.match(/myPS.userPermission-meta.xml$/);
3636
expect(result[2].output).to.match(/objectSettings[\\/]Account.objectSettings-meta.xml$/);
37-
expect(result[3].output).to.match(/objectSettings[\\/]Broker__c.objectSettings-meta.xml$/);
38-
expect(result[4].output).to.match(/myPS.permissionset-meta.xml$/);
37+
expect(result[3].output).to.match(/objectSettings[\\/]AppAnalyticsQueryRequest.objectSettings-meta.xml$/);
38+
expect(result[4].output).to.match(/objectSettings[\\/]Asset.objectSettings-meta.xml$/);
39+
expect(result[5].output).to.match(/objectSettings[\\/]AssetAction.objectSettings-meta.xml$/);
40+
expect(result[6].output).to.match(/objectSettings[\\/]Broker__c.objectSettings-meta.xml$/);
41+
expect(result[7].output).to.match(/myPS.permissionset-meta.xml$/);
3942
});
4043

4144
it('will write a singular child type', async () => {
@@ -57,8 +60,8 @@ describe('DecomposedPermissionSetTransformer', () => {
5760
component,
5861
mergeSet: new ComponentSet([ONLY_PS_PARENT], regAcc),
5962
});
60-
expect(result).to.have.length(5);
61-
expect(result[4].output).to.equal(ONLY_PS_PARENT.xml!);
63+
expect(result).to.have.length(8);
64+
expect(result[7].output).to.equal(ONLY_PS_PARENT.xml!);
6265
});
6366
});
6467
});

test/snapshot/sampleProjects/preset-decomposedPS2/__snapshots__/verify-md-files.expected/customPermissions/MYCP.customPermission

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
<customPermission>MYCP2</customPermission>
77
<dependency>true</dependency>
88
</requiredPermission>
9-
</CustomPermission>
9+
</CustomPermission>

test/snapshot/sampleProjects/preset-decomposedPS2/__snapshots__/verify-md-files.expected/customPermissions/MYCP2.customPermission

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
<CustomPermission xmlns="http://soap.sforce.com/2006/04/metadata">
33
<isLicensed>false</isLicensed>
44
<label>MYCP2</label>
5-
</CustomPermission>
5+
</CustomPermission>

test/snapshot/sampleProjects/preset-decomposedPS2/__snapshots__/verify-md-files.expected/permissionsets/dreamhouse.permissionset

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,14 @@
101101
<object>Broker__c</object>
102102
<viewAllRecords>true</viewAllRecords>
103103
</objectPermissions>
104+
<tabSettings>
105+
<tab>standard-AssetAction</tab>
106+
<visibility>Visible</visibility>
107+
</tabSettings>
108+
<tabSettings>
109+
<tab>Broker__c</tab>
110+
<visibility>Available</visibility>
111+
</tabSettings>
104112
<fieldPermissions>
105113
<editable>true</editable>
106114
<field>Broker__c.Broker_Id__c</field>
@@ -131,14 +139,6 @@
131139
<field>Broker__c.Picture__c</field>
132140
<readable>true</readable>
133141
</fieldPermissions>
134-
<tabSettings>
135-
<tab>Broker__c</tab>
136-
<visibility>Available</visibility>
137-
</tabSettings>
138-
<tabSettings>
139-
<tab>standard-AssetAction</tab>
140-
<visibility>Visible</visibility>
141-
</tabSettings>
142142
<description>my permission set description</description>
143143
<hasActivationRequired>false</hasActivationRequired>
144144
<label>decomposed</label>

test/snapshot/sampleProjects/preset-decomposedPS2/__snapshots__/verify-source-files.expected/force-app/main/default/customPermissions/MYCP.customPermission-meta.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
<customPermission>MYCP2</customPermission>
77
<dependency>true</dependency>
88
</requiredPermission>
9-
</CustomPermission>
9+
</CustomPermission>

test/snapshot/sampleProjects/preset-decomposedPS2/__snapshots__/verify-source-files.expected/force-app/main/default/customPermissions/MYCP2.customPermission-meta.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
<CustomPermission xmlns="http://soap.sforce.com/2006/04/metadata">
33
<isLicensed>false</isLicensed>
44
<label>MYCP2</label>
5-
</CustomPermission>
5+
</CustomPermission>

test/snapshot/sampleProjects/preset-decomposedPS2/__snapshots__/verify-source-files.expected/force-app/main/default/permissionsets/dreamhouse/objectSettings/Account.objectSettings-meta.xml

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,40 +9,4 @@
99
<object>Account</object>
1010
<viewAllRecords>true</viewAllRecords>
1111
</objectPermissions>
12-
<objectPermissions>
13-
<allowCreate>true</allowCreate>
14-
<allowDelete>false</allowDelete>
15-
<allowEdit>true</allowEdit>
16-
<allowRead>true</allowRead>
17-
<modifyAllRecords>false</modifyAllRecords>
18-
<object>AppAnalyticsQueryRequest</object>
19-
<viewAllRecords>false</viewAllRecords>
20-
</objectPermissions>
21-
<objectPermissions>
22-
<allowCreate>false</allowCreate>
23-
<allowDelete>false</allowDelete>
24-
<allowEdit>false</allowEdit>
25-
<allowRead>true</allowRead>
26-
<modifyAllRecords>false</modifyAllRecords>
27-
<object>Asset</object>
28-
<viewAllRecords>true</viewAllRecords>
29-
</objectPermissions>
30-
<objectPermissions>
31-
<allowCreate>false</allowCreate>
32-
<allowDelete>false</allowDelete>
33-
<allowEdit>false</allowEdit>
34-
<allowRead>true</allowRead>
35-
<modifyAllRecords>false</modifyAllRecords>
36-
<object>AssetAction</object>
37-
<viewAllRecords>true</viewAllRecords>
38-
</objectPermissions>
39-
<objectPermissions>
40-
<allowCreate>true</allowCreate>
41-
<allowDelete>true</allowDelete>
42-
<allowEdit>true</allowEdit>
43-
<allowRead>true</allowRead>
44-
<modifyAllRecords>true</modifyAllRecords>
45-
<object>Broker__c</object>
46-
<viewAllRecords>true</viewAllRecords>
47-
</objectPermissions>
4812
</PermissionSet>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<PermissionSet>
3+
<objectPermissions>
4+
<allowCreate>true</allowCreate>
5+
<allowDelete>false</allowDelete>
6+
<allowEdit>true</allowEdit>
7+
<allowRead>true</allowRead>
8+
<modifyAllRecords>false</modifyAllRecords>
9+
<object>AppAnalyticsQueryRequest</object>
10+
<viewAllRecords>false</viewAllRecords>
11+
</objectPermissions>
12+
</PermissionSet>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<PermissionSet>
3+
<objectPermissions>
4+
<allowCreate>false</allowCreate>
5+
<allowDelete>false</allowDelete>
6+
<allowEdit>false</allowEdit>
7+
<allowRead>true</allowRead>
8+
<modifyAllRecords>false</modifyAllRecords>
9+
<object>Asset</object>
10+
<viewAllRecords>true</viewAllRecords>
11+
</objectPermissions>
12+
</PermissionSet>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<PermissionSet>
3+
<objectPermissions>
4+
<allowCreate>false</allowCreate>
5+
<allowDelete>false</allowDelete>
6+
<allowEdit>false</allowEdit>
7+
<allowRead>true</allowRead>
8+
<modifyAllRecords>false</modifyAllRecords>
9+
<object>AssetAction</object>
10+
<viewAllRecords>true</viewAllRecords>
11+
</objectPermissions>
12+
<tabSettings>
13+
<tab>standard-AssetAction</tab>
14+
<visibility>Visible</visibility>
15+
</tabSettings>
16+
</PermissionSet>

test/snapshot/sampleProjects/preset-decomposedPS2/__snapshots__/verify-source-files.expected/force-app/main/default/permissionsets/dreamhouse/objectSettings/Broker__c.objectSettings-meta.xml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<PermissionSet>
3+
<objectPermissions>
4+
<allowCreate>true</allowCreate>
5+
<allowDelete>true</allowDelete>
6+
<allowEdit>true</allowEdit>
7+
<allowRead>true</allowRead>
8+
<modifyAllRecords>true</modifyAllRecords>
9+
<object>Broker__c</object>
10+
<viewAllRecords>true</viewAllRecords>
11+
</objectPermissions>
312
<fieldPermissions>
413
<editable>true</editable>
514
<field>Broker__c.Broker_Id__c</field>
@@ -34,8 +43,4 @@
3443
<tab>Broker__c</tab>
3544
<visibility>Available</visibility>
3645
</tabSettings>
37-
<tabSettings>
38-
<tab>standard-AssetAction</tab>
39-
<visibility>Visible</visibility>
40-
</tabSettings>
4146
</PermissionSet>

0 commit comments

Comments
 (0)