public finalize()

in app/exec/extension/_lib/vsix-manifest-builder.ts [515:574]


	public finalize(files: PackageFiles, resourceData: LocalizedResources, builders: ManifestBuilder[]): Promise<void> {
		return super.finalize(files, resourceData, builders).then(() => {
			// Default installation target to VSS if not provided (and log warning)
			let installationTarget = _.get<any, string>(this.data, "PackageManifest.Installation[0].InstallationTarget");

			if (resourceData) {
				Object.keys(resourceData).forEach(languageTag => {
					if (languageTag === "defaults") {
						return;
					}
					builders.forEach(builder => {
						const locResult = builder.getLocResult(resourceData[languageTag], resourceData.defaults);
						locResult.forEach(lr => {
							lr.isMetadata = builder.producesMetadata;
							lr.lang = languageTag;
							lr.partName = `${languageTag}/${lr.partName}`;
							if (lr.partName.indexOf("vsixlangpack") === -1) {
								lr.assetType = builder.getType();
								lr.addressable = true;
							} else {
								lr.addressable = false;
							}

							const file = this.addFile(lr);
							if (file.assetType) {
								this.addAssetToManifest(file.partName, file.assetType, file.addressable, file.lang);
							}
						});
					});
				});
			}

			Object.keys(files).forEach(fileName => {
				let file = files[fileName];

				// Add all assets to manifest except the vsixmanifest (duh)
				if (file.assetType && file.path !== this.getPath()) {
					this.addAssetToManifest(file.partName, file.assetType, file.addressable, file.lang);
				}
			});

			// Add the manifests as assets.
			builders.forEach(builder => {
				let builderType = builder.getType();
				if (builderType != VsixManifestBuilder.manifestType) {
					this.addAssetToManifest(builder.getPath(), builder.getType(), true);
				}
			});

			// The vsixmanifest will be responsible for generating the [Content_Types].xml file
			// Obviously this is kind of strange, but hey ho.
			return this.genContentTypesXml(builders).then(result => {
				this.addFile({
					path: null,
					content: result,
					partName: "/[Content_Types].xml",
				});
			});
		});
	}