private async editVsixManifest()

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);
        }
    }