Skip to content

Commit 8458c58

Browse files
shetzelmshanemcSF-CLI-BOT
authored
fix: add a better error message with invalid manifests (#740)
* fix: add a better error message with invalid manifests * test: use node lts * test: record perf Co-authored-by: mshanemc <[email protected]> Co-authored-by: SF-CLI-BOT <[email protected]>
1 parent 99fac3a commit 8458c58

File tree

8 files changed

+52
-18
lines changed

8 files changed

+52
-18
lines changed

.github/workflows/perfScaleNut.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ jobs:
1515
- uses: actions/checkout@v3
1616
- uses: actions/setup-node@v3
1717
with:
18-
node-version: latest
1918
cache: yarn
2019
- run: npm install -g sfdx-cli --omit=dev
2120
- run: yarn install

.github/workflows/registryCheck.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ jobs:
1313
steps:
1414
- uses: actions/checkout@v3
1515
- uses: actions/setup-node@v3
16-
with:
17-
node-version: latest
1816
- run: yarn install
1917
- run: yarn build
2018
- run: yarn test:registry

.github/workflows/registryCheckPreview.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ jobs:
1313
steps:
1414
- uses: actions/checkout@v3
1515
- uses: actions/setup-node@v3
16-
with:
17-
node-version: latest
1816
- run: yarn install
1917
- run: yarn build
2018
- run: yarn metadata:preview

src/resolve/manifestResolver.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,16 @@ export class ManifestResolver {
6363
const apiVersion = parsedManifest.version;
6464

6565
for (const typeMembers of packageTypeMembers) {
66-
const typeName = typeMembers.name;
66+
let typeName = typeMembers.name;
67+
// protect against empty/invalid typeMember definitions in the manifest
68+
if (typeof typeName !== 'string' || typeName.length === 0) {
69+
if (typeof typeName === 'object') {
70+
typeName = JSON.stringify(typeName);
71+
}
72+
const err = new Error(`Invalid types definition in manifest file: ${manifestPath}\nFound: "${typeName ?? ''}"`);
73+
err.name = 'InvalidManifest';
74+
throw err;
75+
}
6776
const type = this.registry.getTypeByName(typeName);
6877
const parentType = type.folderType ? this.registry.getTypeByName(type.folderType) : undefined;
6978
const members = ensureArray(typeMembers.members);
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
[
22
{
33
"name": "componentSetCreate",
4-
"duration": 214.46215100004338
4+
"duration": 211.98616599995876
55
},
66
{
77
"name": "sourceToMdapi",
8-
"duration": 6232.359846999985
8+
"duration": 5675.445168000006
99
},
1010
{
1111
"name": "sourceToZip",
12-
"duration": 4866.491668000002
12+
"duration": 4325.303721999982
1313
},
1414
{
1515
"name": "mdapiToSource",
16-
"duration": 4188.821088000026
16+
"duration": 3837.6363589999964
1717
}
1818
]
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
[
22
{
33
"name": "componentSetCreate",
4-
"duration": 428.76088600000367
4+
"duration": 414.30975700001
55
},
66
{
77
"name": "sourceToMdapi",
8-
"duration": 8602.956126999983
8+
"duration": 8222.016792999988
99
},
1010
{
1111
"name": "sourceToZip",
12-
"duration": 6805.6596850000205
12+
"duration": 6871.310621000011
1313
},
1414
{
1515
"name": "mdapiToSource",
16-
"duration": 5127.636436000001
16+
"duration": 4824.338472999982
1717
}
1818
]
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
[
22
{
33
"name": "componentSetCreate",
4-
"duration": 776.4044480000157
4+
"duration": 710.4652360000182
55
},
66
{
77
"name": "sourceToMdapi",
8-
"duration": 12145.154593000014
8+
"duration": 11589.544998999976
99
},
1010
{
1111
"name": "sourceToZip",
12-
"duration": 11030.154324000003
12+
"duration": 11294.996881
1313
},
1414
{
1515
"name": "mdapiToSource",
16-
"duration": 12548.084606999997
16+
"duration": 13089.373708
1717
}
1818
]

test/resolve/manifestResolver.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,36 @@ describe('ManifestResolver', () => {
8080
expect(result.components).to.deep.equal(expected);
8181
});
8282

83+
it('should throw when type is empty', async () => {
84+
const badManifest: VirtualFile = {
85+
name: 'bad-package.xml',
86+
data: Buffer.from(`<?xml version="1.0" encoding="UTF-8"?>
87+
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
88+
<types>
89+
<members></members>
90+
<name></name>
91+
</types>
92+
<version>52.0</version>
93+
</Package>\n`),
94+
};
95+
const tree = new VirtualTreeContainer([
96+
{
97+
dirPath: '.',
98+
children: [badManifest],
99+
},
100+
]);
101+
const resolver = new ManifestResolver(tree);
102+
try {
103+
await resolver.resolve(badManifest.name);
104+
expect(true, 'expected invalid types definition error').to.be.false;
105+
} catch (error) {
106+
expect(error).to.have.property('name', 'InvalidManifest');
107+
expect(error)
108+
.to.have.property('message')
109+
.and.include(`Invalid types definition in manifest file: ${badManifest.name}`);
110+
}
111+
});
112+
83113
it('should resolve nested InFolder types', async () => {
84114
const registry = new RegistryAccess();
85115
const reportType = registry.getTypeByName('report');

0 commit comments

Comments
 (0)