Skip to content

Commit 4da194d

Browse files
authored
Merge pull request #602 from microsoft/sandy081/validateExtensionKind
validate extension kind
2 parents cceebc9 + 7241e0d commit 4da194d

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/package.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,6 +1032,16 @@ export function validateManifest(manifest: Manifest): Manifest {
10321032
}
10331033
});
10341034

1035+
if (manifest.extensionKind) {
1036+
const extensionKinds: ExtensionKind[] = Array.isArray(manifest.extensionKind)
1037+
? manifest.extensionKind
1038+
: [manifest.extensionKind];
1039+
const validExtensionKinds: ExtensionKind[] = ['ui', 'workspace'];
1040+
if (extensionKinds.some(extensionKind => !validExtensionKinds.includes(extensionKind))) {
1041+
throw new Error(`Manifest contains invalid value '${extensionKind}' in the 'extensionKind' property. Allowed values are 'ui', 'workspace'.`);
1042+
}
1043+
}
1044+
10351045
return manifest;
10361046
}
10371047

src/test/package.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,21 @@ describe('validateManifest', () => {
390390
validateManifest(createManifest({ activationEvents: ['any'], browser: 'browser.js' }));
391391
validateManifest(createManifest({ activationEvents: ['any'], main: 'main.js', browser: 'browser.js' }));
392392
});
393+
394+
it('should validate extensionKind', () => {
395+
assert.throws(() => validateManifest(createManifest({ extensionKind: ['web'] })));
396+
assert.throws(() => validateManifest(createManifest({ extensionKind: 'web' })));
397+
assert.throws(() => validateManifest(createManifest({ extensionKind: ['workspace', 'ui', 'web'] })));
398+
assert.throws(() => validateManifest(createManifest({ extensionKind: ['workspace', 'web'] })));
399+
assert.throws(() => validateManifest(createManifest({ extensionKind: ['ui', 'web'] })));
400+
assert.throws(() => validateManifest(createManifest(<any>{ extensionKind: ['any'] })));
401+
validateManifest(createManifest({ extensionKind: 'ui' }));
402+
validateManifest(createManifest({ extensionKind: ['ui'] }));
403+
validateManifest(createManifest({ extensionKind: 'workspace' }));
404+
validateManifest(createManifest({ extensionKind: ['workspace'] }));
405+
validateManifest(createManifest({ extensionKind: ['ui', 'workspace'] }));
406+
validateManifest(createManifest({ extensionKind: ['workspace', 'ui'] }));
407+
});
393408
});
394409

395410
describe('toVsixManifest', () => {

0 commit comments

Comments
 (0)