in BuildTasks/PublishExtension/vsixeditor.ts [202:273]
private async editVsixManifest(dirPath: string): Promise<ManifestData> {
const x2jsLib = require("x2js");
const x2js = new x2jsLib();
const vsixManifestPath = path.join(dirPath, "extension.vsixmanifest");
try {
let vsixManifestData = await fse.readFile(vsixManifestPath, "utf8");
const vsixmanifest = x2js.xml2js(vsixManifestData);
const identity = vsixmanifest.PackageManifest.Metadata.Identity;
if (this.versionNumber) { identity._Version = this.versionNumber; }
if (this.id) { identity._Id = this.id; }
if (this.idTag) { identity._Id += this.idTag; }
if (this.publisher) { identity._Publisher = this.publisher; }
if (this.extensionName) { vsixmanifest.PackageManifest.Metadata.DisplayName = this.extensionName; }
if (this.extensionVisibility && this.extensionVisibility !== "default") {
const flagsEditor = new GalleryFlagsEditor(vsixmanifest.PackageManifest.Metadata.GalleryFlags);
const isPublic = this.extensionVisibility.indexOf("public") >= 0;
const isPreview = this.extensionVisibility.indexOf("preview") >= 0;
if (isPublic) {
flagsEditor.addPublicFlag();
}
else {
flagsEditor.removePublicFlag();
}
if (isPreview) {
flagsEditor.addPreviewFlag();
}
else {
flagsEditor.removePreviewFlag();
}
vsixmanifest.PackageManifest.Metadata.GalleryFlags = flagsEditor.toString();
}
if (this.extensionPricing && this.extensionPricing !== "default") {
const flagsEditor = new GalleryFlagsEditor(vsixmanifest.PackageManifest.Metadata.GalleryFlags);
const isFree = this.extensionPricing.indexOf("free") >= 0;
const isPaid = this.extensionPricing.indexOf("paid") >= 0;
if (isFree) {
flagsEditor.removePaidFlag();
}
if (isPaid) {
flagsEditor.addPaidFlag();
}
vsixmanifest.PackageManifest.Metadata.GalleryFlags = flagsEditor.toString();
}
vsixManifestData = x2js.js2xml(vsixmanifest);
const manifestData = new ManifestData(identity._Version,
identity._Id,
identity._Publisher,
this.extensionVisibility,
this.extensionPricing,
vsixmanifest.PackageManifest.Metadata.DisplayName,
dirPath);
await fse.writeFile(vsixManifestPath, vsixManifestData, { encoding: "utf8" });
return Promise.resolve(manifestData);
}
catch (err) {
return Promise.reject(err);
}
}