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