diff --git a/resources/extension.vsixmanifest b/resources/extension.vsixmanifest
index e1fd31b..9b4ae83 100644
--- a/resources/extension.vsixmanifest
+++ b/resources/extension.vsixmanifest
@@ -6,7 +6,7 @@
<%- description %>
<%- tags %>
<%- categories %>
- Public
+ <%- flags %>
<% if (links.repository) { %>
diff --git a/src/manifest.ts b/src/manifest.ts
index 99fa206..ca672db 100644
--- a/src/manifest.ts
+++ b/src/manifest.ts
@@ -17,6 +17,7 @@ export interface Manifest {
activationEvents?: string[];
extensionDependencies?: string[];
galleryBanner?: { color?: string; theme?: string; };
+ preview?: boolean;
_bundling?: { [name: string]: string; }[];
_testing?: string;
diff --git a/src/package.ts b/src/package.ts
index 5bb19d6..ca4f4be 100644
--- a/src/package.ts
+++ b/src/package.ts
@@ -94,6 +94,12 @@ class MainProcessor extends BaseProcessor {
constructor(manifest: Manifest) {
super(manifest);
+ const flags = ['Public'];
+
+ if (manifest.preview) {
+ flags.push('Preview');
+ }
+
_.assign(this.vsix, {
id: manifest.name,
displayName: manifest.displayName || manifest.name,
@@ -102,6 +108,7 @@ class MainProcessor extends BaseProcessor {
description: manifest.description || '',
tags: (manifest.keywords || []).concat('vscode').join(','),
categories: (manifest.categories || []).join(','),
+ flags: flags.join(' '),
links: {
repository: getUrl(manifest.repository),
bugs: getUrl(manifest.bugs),
diff --git a/src/test/package.test.ts b/src/test/package.test.ts
index c1da238..9194b3b 100644
--- a/src/test/package.test.ts
+++ b/src/test/package.test.ts
@@ -411,6 +411,22 @@ describe('toVsixManifest', () => {
assert.ok(categories.some(c => c === 'world'));
});
});
+
+ it('should respect preview flag', () => {
+ const manifest = {
+ name: 'test',
+ publisher: 'mocha',
+ version: '0.0.1',
+ engines: Object.create(null),
+ preview: true
+ };
+
+ return _toVsixManifest(manifest, [])
+ .then(xml => parseXml(xml))
+ .then(result => {
+ assert.deepEqual(result.PackageManifest.Metadata[0].GalleryFlags, ['Public Preview']);
+ });
+ });
});
describe('toContentTypes', () => {