Outlook_Addin_LLM/node_modules/office-addin-manifest-converter/lib/converter.js

1997 lines
125 KiB
JavaScript
Raw Normal View History

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Converter = exports.RuntimeRecord = exports.CommandSurfaceType = exports.ResourceType = exports.InputRuntimeLifeTime = exports.RuntimeSource = void 0;
const osfmos_1 = require("../lib/osfmos");
const constants_1 = require("./constants");
const conversionContext_1 = require("./conversionContext");
const iconBuilder_1 = require("./iconBuilder");
const localeBuilder_1 = require("./localeBuilder");
const MOS = require("./mosManifest");
const mosManifest_1 = require("./mosManifest");
const utilities_1 = require("./utilities");
const util = require("util");
const { Utils } = require('./osfUtils');
Utils.OverrideMethods();
var RuntimeSource;
(function (RuntimeSource) {
RuntimeSource["DefaultSettingSourceLocations"] = "DefaultSettingsSourceLocations";
RuntimeSource["ExecuteFunction"] = "ExecuteFunction";
RuntimeSource["SharedRuntimes"] = "SharedRuntimes";
RuntimeSource["ShowTaskpane"] = "ShowTaskpane";
RuntimeSource["LaunchEvent"] = "LaunchEvent";
})(RuntimeSource || (exports.RuntimeSource = RuntimeSource = {}));
var InputRuntimeLifeTime;
(function (InputRuntimeLifeTime) {
InputRuntimeLifeTime[InputRuntimeLifeTime["Short"] = 0] = "Short";
InputRuntimeLifeTime[InputRuntimeLifeTime["Long"] = 1] = "Long";
})(InputRuntimeLifeTime || (exports.InputRuntimeLifeTime = InputRuntimeLifeTime = {}));
var ResourceType;
(function (ResourceType) {
ResourceType["AllLocaleImages"] = "AllLocaleImages";
ResourceType["AllLocaleUrls"] = "AllLocaleUrls";
ResourceType["AllLocaleLongStrings"] = "AllLocaleLongStrings";
ResourceType["AllLocaleShortStrings"] = "AllLocaleShortStrings";
})(ResourceType || (exports.ResourceType = ResourceType = {}));
var CommandSurfaceType;
(function (CommandSurfaceType) {
CommandSurfaceType["None"] = "None";
CommandSurfaceType["Ribbon"] = "Ribbon";
CommandSurfaceType["ContextMenu"] = "ContextMenu";
})(CommandSurfaceType || (exports.CommandSurfaceType = CommandSurfaceType = {}));
class RuntimeRecord {
constructor() {
this._lifetime = MOS.RuntimesLifetime.Short;
this._isCapabilitiesSorted = false;
this._scriptResId = null;
}
sortCapabilities() {
if (!this._isCapabilitiesSorted && !utilities_1.Utilities.isNullOrUndefined(this._versionOverrideCapabilities)) {
Converter._sortCapabilitiesAlphabatically(this._versionOverrideCapabilities);
this._isCapabilitiesSorted = true;
}
}
getKey() {
return Converter._generateRuntimeLookupKey(this._resource, this._lifetime, this._versionOverrideCapabilities);
}
}
exports.RuntimeRecord = RuntimeRecord;
class Converter {
constructor(inputXml, locale) {
this._mosManifest = new mosManifest_1.MosManifest();
this._xmlManifest = new osfmos_1.OSF.Manifest.OfficeAppManifest(inputXml, locale, utilities_1.Utilities.getVerbosity());
this._localeBuilder = new localeBuilder_1.LocaleBuilder();
this._iconBuilder = new iconBuilder_1.IconBuilder();
this._uniqueSuffix = 0;
this._uniqueRuntimeSuffix = 0;
this._uniqueActionSuffix = 0;
this._uniqueViewSuffix = 0;
this._runtimeLookup = {};
this._addedExecuteFunctions = {};
}
getMosManifest() {
return this._mosManifest;
}
getLocaleBuilder() {
return this._localeBuilder;
}
convert() {
let context = new conversionContext_1.ConversionContext();
this._populateRoot(context);
}
downloadAndStoreIcons(folderPath) {
return __awaiter(this, void 0, void 0, function* () {
yield this._iconBuilder.downloadAndStoreIcons(folderPath);
});
}
getNextUniqueSuffix() {
return ++this._uniqueSuffix;
}
getNextRuntimeSuffix() {
return ++this._uniqueRuntimeSuffix;
}
getNextActionSuffix() {
return ++this._uniqueActionSuffix;
}
getNextViewSuffix() {
return ++this._uniqueViewSuffix;
}
_populateRoot(context) {
this._mosManifest.$schema = constants_1.Constants.MosManifestSchemaVersionGA;
this._mosManifest.manifestVersion = constants_1.Constants.MosManifestGAVersion_1_17;
this._mosManifest.id = this._xmlManifest.getMarketplaceID();
this._mosManifest.version = this._xmlManifest.getMarketplaceVersion();
this._populateRootName();
this._populateRootDescription();
this._populateRootIcons();
this._mosManifest.accentColor = constants_1.Constants.DefaultAccessColor;
this._populateDeveloper();
this._populateLocalizationInfo();
this._populateRootPermissions();
this._populateRootDevicePermissions();
this._populateAuthorization();
this._populateWebApplicationInfos();
this._populateExtension(context);
this._populateRootRequirements();
this._populateValidDomains();
this._populateStaticTabs();
this._populateComposeExtensions();
this._populateGraphConnector();
this._populateConfigurableTabs();
this._populateBots();
this._populateConnectors();
this._populateActivities();
this._populateMeetingExtensionDefinition();
this._populateSubscriptionOffer();
this._populateShowLoadingIndicator();
this._populateIsFullScreen();
this._populateConfigurableProperties();
this._populateDefaultBlockUntilAdminAction();
this._populatePublisherDocsUrl();
this._populateDefaultInstallScope();
this._populateDefaultGroupCapability();
}
_populateRootName() {
let name = new MOS.Name();
name.short = utilities_1.Utilities.getLimitedString(this._xmlManifest.getDefaultDisplayName(), constants_1.Constants.MaxResourceStringLength30, "name.short truncated to %d characters");
name.full = utilities_1.Utilities.getLimitedString(this._xmlManifest.getDefaultDisplayName(), constants_1.Constants.MaxResourceStringLength100, "name.full truncated to %d characters");
this._populateLocaleSensitiveProperty(this._xmlManifest.getDisplayName, constants_1.Constants.MosNameShort, null);
this._populateLocaleSensitiveProperty(this._xmlManifest.getDisplayName, constants_1.Constants.MosNameFull, null);
this._mosManifest.name = name;
}
_populateRootDescription() {
let description = new MOS.Description();
let legacyDescription = this._xmlManifest.getDefaultDescription();
if (!utilities_1.Utilities.isNullOrUndefined(legacyDescription)) {
description.short = utilities_1.Utilities.getLimitedString(legacyDescription, constants_1.Constants.MaxResourceStringLength80, "description.short truncated to %d characters");
description.full = legacyDescription;
}
this._populateLocaleSensitiveProperty(this._xmlManifest.getDescription, constants_1.Constants.MosDescriptionShort, constants_1.Constants.MaxResourceStringLength80);
this._populateLocaleSensitiveProperty(this._xmlManifest.getDescription, constants_1.Constants.MosDescriptionFull, constants_1.Constants.MaxResourceStringLength4000);
this._mosManifest.description = description;
}
_populateRootIcons() {
let icons = new MOS.Icons();
const defaultLocale = this._xmlManifest.getDefaultLocale();
let defaultIconUrl = this._xmlManifest.getIconUrl(defaultLocale);
if (utilities_1.Utilities.isNullOrUndefined(defaultIconUrl)) {
defaultIconUrl = this._xmlManifest.getDefaultIconUrl();
}
if (utilities_1.Utilities.isNullOrUndefined(defaultIconUrl)) {
defaultIconUrl = constants_1.Constants.IconsOutline + ".png";
}
icons.outline = this._iconBuilder.addIconAndGetReference(defaultIconUrl, true, true);
let defaultHighResolutionIconUrl = this._xmlManifest.getHighResolutionIconUrl(defaultLocale);
if (utilities_1.Utilities.isNullOrUndefined(defaultHighResolutionIconUrl)) {
defaultHighResolutionIconUrl = this._xmlManifest.getDefaultHighResolutionIconUrl();
}
if (utilities_1.Utilities.isNullOrUndefined(defaultHighResolutionIconUrl)) {
defaultHighResolutionIconUrl = constants_1.Constants.IconsColor + ".png";
}
icons.color = this._iconBuilder.addIconAndGetReference(defaultHighResolutionIconUrl, true, true);
this._mosManifest.icons = icons;
}
_populateDeveloper() {
let developer = new MOS.Developer();
developer.name = utilities_1.Utilities.getLimitedString(this._xmlManifest.getProviderName(), constants_1.Constants.MaxResourceStringLength32, "developer.name truncated to %d characters");
developer.mpnId = undefined;
let supportUrl = this._xmlManifest.getSupportUrl(this._xmlManifest.getDefaultLocale()) || constants_1.Constants.DefaultDeveloperUrl;
utilities_1.Utilities.log("Using <SupportUrl> from legacy manifest to populate developer.privacyUrl, developer.termsOfUseUrl and developer.websiteUrl in metaos manifest.");
developer.privacyUrl = supportUrl;
developer.termsOfUseUrl = supportUrl;
developer.websiteUrl = supportUrl;
this._mosManifest.developer = developer;
}
_populateLocalizationInfo() {
let localizationInfo = new MOS.LocalizationInfo();
localizationInfo.defaultLanguageTag = localeBuilder_1.LocaleBuilder.fixLocaleCasing(this._xmlManifest.getDefaultLocale());
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
if (seenLocale != localizationInfo.defaultLanguageTag) {
let additionalLanguages = new MOS.AdditionalLanguages();
additionalLanguages.languageTag = seenLocale;
additionalLanguages.file = utilities_1.Utilities.createLocaleFileName(seenLocale);
if (utilities_1.Utilities.isNullOrUndefined(localizationInfo.additionalLanguages)) {
localizationInfo.additionalLanguages = [];
}
localizationInfo.additionalLanguages.push(additionalLanguages);
}
}
this._mosManifest.localizationInfo = localizationInfo;
}
_populateWebApplicationInfos() {
this._populateWebApplicationInfoFromContentAndTaskpane();
this._populateWebApplicationInfoFromMailbox();
}
_populateWebApplicationInfoFromMailbox() {
var _a, _b;
let overrideIndexes = this._getMailHostOverrides();
let mosWebApplicationInfo = new MOS.WebApplicationInfo();
for (let overrideIndex of overrideIndexes) {
let webApplicationInfo = (_b = (_a = this._xmlManifest._versionOverrides[constants_1.Constants.InputMailHost]) === null || _a === void 0 ? void 0 : _a[overrideIndex]) === null || _b === void 0 ? void 0 : _b._webApplicationInfo;
if (utilities_1.Utilities.isNullOrUndefined(webApplicationInfo) ||
(utilities_1.Utilities.isNullOrUndefined(webApplicationInfo["_webApplicationId"]) && utilities_1.Utilities.isNullOrUndefined(webApplicationInfo["_webApplicationResource"]))) {
continue;
}
mosWebApplicationInfo.id = webApplicationInfo["_webApplicationId"];
mosWebApplicationInfo.resource = webApplicationInfo["_webApplicationResource"];
if (utilities_1.Utilities.isNullOrUndefined(this._mosManifest.webApplicationInfo)) {
this._mosManifest.webApplicationInfo = mosWebApplicationInfo;
}
else {
utilities_1.Utilities.logError("MetaOS schema currently only supports one webapplicationInfo but we have found more than one in this manifest MailHost override: " + overrideIndex + ". " + " app: " + this._xmlManifest.getDisplayName(this._xmlManifest.getDefaultLocale()) + " WI:6224818");
return;
}
}
}
_populateWebApplicationInfoFromContentAndTaskpane() {
let mosWebApplicationInfo = new MOS.WebApplicationInfo();
let shouldBeAdded = false;
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest.getWebApplicationId())) {
mosWebApplicationInfo.id = this._xmlManifest.getWebApplicationId();
shouldBeAdded = true;
}
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest.getWebApplicationResource())) {
mosWebApplicationInfo.resource = this._xmlManifest.getWebApplicationResource();
shouldBeAdded = true;
}
if (shouldBeAdded) {
this._mosManifest.webApplicationInfo = mosWebApplicationInfo;
}
}
_populateRootPermissions() {
}
_populateRootDevicePermissions() {
}
_populateAuthorization() {
let mosAuthorization = new MOS.Authorization();
let permissions = this._xmlManifest.getPermission();
let mosPermissions = null;
if (!utilities_1.Utilities.isNullOrUndefined(permissions)) {
mosPermissions = new MOS.Permissions2();
mosPermissions.resourceSpecific = [];
let mosResourceSpecific = new MOS.ResourceSpecific();
mosResourceSpecific.name = Converter._mosPermissionfromXmlPermission(permissions, this._xmlManifest._target);
mosResourceSpecific.type = MOS.ResourceSpecificType.Delegated;
mosPermissions.resourceSpecific.push(mosResourceSpecific);
mosAuthorization.permissions = mosPermissions;
}
let extendedPermissions = this._xmlManifest.getExtendedPermissions(osfmos_1.OSF.VersionOverridesNumber.V1_1);
if (!utilities_1.Utilities.isNullOrUndefined(extendedPermissions) && extendedPermissions.length > 0) {
for (let perm of extendedPermissions) {
if (perm === constants_1.Constants.InputAppendOnSend) {
if (utilities_1.Utilities.isNullOrUndefined(mosPermissions)) {
mosPermissions = new MOS.Permissions2();
mosPermissions.resourceSpecific = [];
}
let mosResourceSpecific = new MOS.ResourceSpecific();
mosResourceSpecific.name = constants_1.Constants.MailboxItemAppendOnSendUser;
mosResourceSpecific.type = MOS.ResourceSpecificType.Delegated;
mosPermissions.resourceSpecific.push(mosResourceSpecific);
mosAuthorization.permissions = mosPermissions;
}
else {
utilities_1.Utilities.logWarning("Ignoring unsupported ExtendedPermission: %s", perm);
}
}
}
let supportsSharedFolders = this._xmlManifest.getSupportsSharedFolders(osfmos_1.OSF.VersionOverridesNumber.V1_1, constants_1.Constants.InputDesktopFormFactor);
if (supportsSharedFolders) {
if (utilities_1.Utilities.isNullOrUndefined(mosPermissions)) {
mosPermissions = new MOS.Permissions2();
mosPermissions.resourceSpecific = [];
}
let mosResourceSpecific = new MOS.ResourceSpecific();
mosResourceSpecific.name = constants_1.Constants.MailboxAccessSharedFoldersUser;
mosResourceSpecific.type = MOS.ResourceSpecificType.Delegated;
mosPermissions.resourceSpecific.push(mosResourceSpecific);
mosAuthorization.permissions = mosPermissions;
}
if (!utilities_1.Utilities.isNullOrUndefined(mosPermissions)) {
this._mosManifest.authorization = mosAuthorization;
}
}
_populateExtension(context) {
let extension = new MOS.Extensions();
this._populateAlternates(extension);
this._populateContextMenus(extension);
this._populateGetStartedMessages(context, extension);
this._populateKeyboards(extension);
this._populateExtensionRequirements(extension);
this._populateRuntimes(context, extension);
this._populateRibbonsAndContextMenus(context, extension);
this._populateAutoRunEvents(context, extension);
this._populateFormSettings(extension);
if (utilities_1.Utilities.isNullOrUndefined(this._mosManifest.extensions)) {
this._mosManifest.extensions = [];
}
this._addRuntimeActionLocalizedDisplayNames(extension.runtimes);
this._mosManifest.extensions.push(extension);
}
_populateAlternates(extension) {
let alternates = [];
let defaultLocale = this._xmlManifest.getDefaultLocale();
let iconUrl = this._xmlManifest.getDefaultIconUrl();
let highResolutionIconUrl = this._xmlManifest.getHighResolutionIconUrl(defaultLocale);
if (!utilities_1.Utilities.isNullOrUndefined(iconUrl) ||
!utilities_1.Utilities.isNullOrUndefined(highResolutionIconUrl)) {
let alternate = new MOS.Alternates();
alternate.alternateIcons = new MOS.AlternateIcons();
if (!utilities_1.Utilities.isNullOrUndefined(iconUrl)) {
alternate.alternateIcons.icon.url = iconUrl;
let iconSize = constants_1.Constants.LegacyWXPAppIconSize;
if (this._xmlManifest._hostType && this._xmlManifest.getTarget() == osfmos_1.OSF.OfficeAppType.MailApp) {
iconSize = constants_1.Constants.LegacyMailAppIconSize;
}
alternate.alternateIcons.icon.size = iconSize;
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
if (seenLocale !== defaultLocale) {
const locIconUrl = this._xmlManifest.getIconUrl(seenLocale);
let formattedValue = Converter._formatResourceStringWithVariableNumberParameters(constants_1.Constants.AlternatesIconUrl, alternates.length);
this._localeBuilder.addLocaleString(seenLocale, formattedValue, locIconUrl);
}
}
}
if (!utilities_1.Utilities.isNullOrUndefined(highResolutionIconUrl)) {
alternate.alternateIcons.highResolutionIcon.url = highResolutionIconUrl;
let highResolutionIconSize = constants_1.Constants.LegacyWXPAppHighResolutionIconSize;
alternate.alternateIcons.highResolutionIcon.size = highResolutionIconSize;
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
if (seenLocale !== defaultLocale) {
const locHighResolutionIconUrl = this._xmlManifest.getHighResolutionIconUrl(seenLocale);
let formattedValue = Converter._formatResourceStringWithVariableNumberParameters(constants_1.Constants.AlternatesHighResolutionIconUrl, alternates.length);
this._localeBuilder.addLocaleString(seenLocale, formattedValue, locHighResolutionIconUrl);
}
}
}
alternates.push(alternate);
}
let equivalentAddins = this._xmlManifest.getEquivalentAddins();
if (!utilities_1.Utilities.isNullOrUndefined(equivalentAddins) && equivalentAddins.length > 0) {
for (const equivalentAddin of equivalentAddins) {
let alternate = new MOS.Alternates();
alternate.prefer = new MOS.Prefer();
if (equivalentAddin.isComAddin()) {
alternate.prefer.comAddin = new MOS.ComAddin();
alternate.prefer.comAddin.progId = equivalentAddin.getProgId();
}
else if (equivalentAddin.isXLLCompatible()) {
alternate.prefer.xllCustomFunctions = new MOS.XllCustomFunctions();
alternate.prefer.xllCustomFunctions.fileName = equivalentAddin.getFileName();
}
else {
utilities_1.Utilities.logWarning("Unknown equivalent add-in type encountered.");
continue;
}
alternates.push(alternate);
}
}
if (alternates.length > 0) {
extension.alternates = alternates;
}
}
_populateAutoRunEvents(context, extension) {
if (utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputMailHost])) {
return;
}
let overrides = this._getMailHostOverrides();
if (overrides.length == 0) {
return;
}
let autoRunEvents = [];
for (let overrideId of overrides) {
let addinCommandsExtensionPoints = Converter._getAddinCommandsExtensionPoints(constants_1.Constants.InputMailHost, overrideId, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, constants_1.Constants.InputMailHost, overrideId);
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPoints)) {
for (let extensionPoint of addinCommandsExtensionPoints) {
if (extensionPoint[constants_1.Constants.InputType] === constants_1.Constants.InputLaunchEvent &&
!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputEvents])) {
let autoRunEvent = null;
for (let innerEvent of extensionPoint[constants_1.Constants.InputEvents]) {
if (utilities_1.Utilities.isNullOrUndefined(autoRunEvent)) {
autoRunEvent = new MOS.AutoRunEvents();
autoRunEvent.events = [];
autoRunEvent.requirements = new MOS.RequirementsExtensionElement();
autoRunEvent.requirements.capabilities = [];
autoRunEvent.requirements.scopes = [];
autoRunEvent.requirements.scopes.push(MOS.Scopes.Mail);
Converter._mergeInVersionOverrideRequirements(context.getCurrentVersionOverrideCapabilities(), autoRunEvent.requirements);
autoRunEvents.push(autoRunEvent);
}
let mosEvent = new MOS.Events();
let runtime = null;
const runtimeUrl = extensionPoint[constants_1.Constants.InputResid];
const runtimeKey = Converter._generateRuntimeLookupKey(runtimeUrl, MOS.RuntimesLifetime.Short, context.getCurrentVersionOverrideCapabilities());
if (!utilities_1.Utilities.isNullOrUndefined(runtimeKey)) {
runtime = this._runtimeLookup[runtimeKey];
}
if (!utilities_1.Utilities.isNullOrUndefined(runtime)) {
let actionId = innerEvent[constants_1.Constants.InputFunctionName];
if (utilities_1.Utilities.isNullOrUndefined(actionId)) {
actionId = innerEvent[constants_1.Constants.InputAction];
actionId = this._createUniqueActionId(actionId);
utilities_1.Utilities.logError("Unable to get functionName from LaunchEvent. Using %s instead.", actionId);
}
if (utilities_1.Utilities.isNullOrUndefined(runtime.actions)) {
runtime.actions = [];
}
let action = new MOS.ExtensionRuntimesActionsItem();
action.id = actionId;
action.displayName = actionId;
mosEvent.actionId = actionId;
action.type = MOS.ExtensionRuntimesActionsItemType.ExecuteFunction;
this._addRuntimeExecuteAction(runtime, action, runtimeKey);
}
else {
utilities_1.Utilities.assert(!utilities_1.Utilities.isNullOrUndefined(runtime), "Expected runtime to be cached.");
utilities_1.Utilities.logError("Did not find runtime %s for autorunevent.", runtimeKey);
}
const sendMode = innerEvent[constants_1.Constants.InputSendMode];
if (!utilities_1.Utilities.isNullOrUndefined(sendMode) && sendMode.length > 0) {
mosEvent.options = new MOS.Options();
mosEvent.options.sendMode = Converter._mosSendModeFromXmlSendMode(sendMode);
}
mosEvent.type = Converter._legacyLaunchEventToMosEventType(innerEvent[constants_1.Constants.InputType]);
autoRunEvent.events.push(mosEvent);
}
}
}
}
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
}
if (autoRunEvents.length > 0) {
extension.autoRunEvents = autoRunEvents;
}
}
_populateContextMenus(extension) {
}
_populateGetStartedMessages(context, extension) {
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputWorkbook])) {
this._fillGetStartedMessagesFromVersionOverrides(context, extension, osfmos_1.OSF.ManifestHostType.Workbook);
}
else if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputDocument])) {
this._fillGetStartedMessagesFromVersionOverrides(context, extension, osfmos_1.OSF.ManifestHostType.Document);
}
else if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputPresentation])) {
this._fillGetStartedMessagesFromVersionOverrides(context, extension, osfmos_1.OSF.ManifestHostType.Presentation);
}
}
_fillGetStartedMessagesFromVersionOverrides(context, extension, manifestHostType) {
var hostType = Converter._getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType);
var versionOverride = this._xmlManifest._versionOverrides[hostType];
if (utilities_1.Utilities.isNullOrUndefined(versionOverride)) {
return;
}
var getStartedNode = versionOverride[constants_1.Constants.InputGetStartedNode];
if (!utilities_1.Utilities.isNullOrUndefined(getStartedNode)) {
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, null);
let getStartedMessage = new MOS.GetStartedMessages();
getStartedMessage.title = getStartedNode[constants_1.Constants.InputTitle];
getStartedMessage.description = getStartedNode[constants_1.Constants.InputDescription];
getStartedMessage.learnMoreUrl = getStartedNode[constants_1.Constants.InputLearnMoreUrl];
getStartedMessage.requirements = new MOS.RequirementsExtensionElement();
getStartedMessage.requirements.capabilities = Converter._cloneCapabilities(context.getCurrentVersionOverrideCapabilities());
extension.getStartedMessages = [];
extension.getStartedMessages.push(getStartedMessage);
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
}
return;
}
_populateKeyboards(extension) {
this._xmlManifest.getExtendedOverrides();
}
_populateFormSettings(extension) {
var _a, _b;
if (utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[constants_1.Constants.InputMailHost])) {
return;
}
const formSettings = this._xmlManifest.getFormSettings();
const defaultLocale = this._xmlManifest.getDefaultLocale();
for (let item in formSettings) {
const formSetting = formSettings[item][constants_1.Constants.InputDesktopSettings];
const sourceLocation = (_a = formSetting === null || formSetting === void 0 ? void 0 : formSetting.SourceLocation) === null || _a === void 0 ? void 0 : _a[defaultLocale];
if (!utilities_1.Utilities.isNullOrUndefined(sourceLocation)) {
extension.audienceClaimUrl = sourceLocation;
const defaultLocale = this._xmlManifest.getDefaultLocale().toLocaleLowerCase();
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
if (seenLocale !== defaultLocale) {
const locFormSetting = (_b = formSetting === null || formSetting === void 0 ? void 0 : formSetting.SourceLocation) === null || _b === void 0 ? void 0 : _b[seenLocale];
this._localeBuilder.addLocaleString(seenLocale, constants_1.Constants.ExtensionAudienceClaimUrl, locFormSetting);
}
}
break;
}
}
}
_populateExtensionRequirements(extension) {
var _a;
let requirements = new MOS.RequirementsExtensionElement();
if (!utilities_1.Utilities.isNullOrUndefined((_a = this._xmlManifest.getRequirements()) === null || _a === void 0 ? void 0 : _a.sets)) {
requirements.capabilities = Converter._getCapabilitiesFromLegacyRequirementSets(this._xmlManifest.getRequirements().sets);
}
this._addScopesFromHosts(requirements);
extension.requirements = requirements;
}
static _getCapabilitiesFromLegacyRequirementSets(sets) {
let capabilities = null;
for (let i = 0; i < sets.length; i++) {
let requirementSet = sets[i];
let capability = new MOS.Capabilities();
capability.name = requirementSet.name;
capability.minVersion = requirementSet.version;
if (utilities_1.Utilities.isNullOrUndefined(capabilities)) {
capabilities = [];
}
capabilities.push(capability);
}
return capabilities;
}
_populateRibbonsAndContextMenus(context, extension) {
let ribbons = [];
let contextMenus = [];
this._addRibbonOrContextMenuForHostType(context, osfmos_1.OSF.ManifestHostType.Mailbox, ribbons, contextMenus);
this._addRibbonOrContextMenuForHostType(context, osfmos_1.OSF.ManifestHostType.Workbook, ribbons, contextMenus);
this._addRibbonOrContextMenuForHostType(context, osfmos_1.OSF.ManifestHostType.Document, ribbons, contextMenus);
this._addRibbonOrContextMenuForHostType(context, osfmos_1.OSF.ManifestHostType.Presentation, ribbons, contextMenus);
if (ribbons.length > 0) {
extension.ribbons = ribbons;
}
if (contextMenus.length > 0) {
extension.contextMenus = contextMenus;
}
context.setCurrentRibbonIndex(conversionContext_1.ConversionContext.UnsetIndex);
context.setCurrentContextMenuIndex(conversionContext_1.ConversionContext.UnsetIndex);
}
_addRuntimeActionLocalizedDisplayNames(runtimes) {
if (utilities_1.Utilities.isNullOrUndefined(runtimes)) {
return;
}
for (var runtimeIdx = 0; runtimeIdx < runtimes.length; runtimeIdx++) {
var runtime = runtimes[runtimeIdx];
if (!utilities_1.Utilities.isNullOrUndefined(runtime) && !utilities_1.Utilities.isNullOrUndefined(runtime.actions)) {
for (var actionIdx = 0; actionIdx < runtime.actions.length; actionIdx++) {
var action = runtime.actions[actionIdx];
this._addConstantResourceForAllSeenLocales(action.displayName, constants_1.Constants.RuntimesActionsDisplayName, runtimeIdx, actionIdx, null, null, null, null);
}
}
}
}
_addRibbonOrContextMenuForHostType(context, manifestHostType, ribbons, contextMenus) {
if (!this._doesHostHaveContentInManifest(manifestHostType)) {
return;
}
context.setManifestHostType(manifestHostType);
let hostType = Converter._getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType);
if (Converter._isWXP(hostType)) {
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, osfmos_1.OSF.VersionOverridesNumber.V1_0.toString());
let functionFileResid = Converter._getFunctionFileResid(hostType, null, this._xmlManifest);
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid) && !utilities_1.Utilities.isNullOrUndefined(functionFileResid[constants_1.Constants.InputDesktopFormFactor])) {
context.setCurrentFunctionFileResid(functionFileResid[constants_1.Constants.InputDesktopFormFactor]);
}
let addinCommandsExtensionPoints = Converter._getAddinCommandsExtensionPoints(hostType, null, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPoints)) {
this._addRibbonOrContextMenuForManifestSection(context, hostType, null, addinCommandsExtensionPoints, ribbons, contextMenus);
}
context.setCurrentFunctionFileResid(null);
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
}
else if (hostType === constants_1.Constants.InputMailHost) {
let supportedVersionOverrides = Converter._getMailHostVersionOVerrides();
for (let vo of supportedVersionOverrides) {
let addinCommandsExtensionPoints = Converter._getAddinCommandsExtensionPoints(hostType, vo, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, vo);
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPoints)) {
let functionFileResidVersion = Converter._getFunctionFileResid(hostType, vo, this._xmlManifest);
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion) && !utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion[constants_1.Constants.InputDesktopFormFactor])) {
context.setCurrentFunctionFileResid(functionFileResidVersion[constants_1.Constants.InputDesktopFormFactor]);
}
this._addRibbonOrContextMenuForManifestSection(context, hostType, vo, addinCommandsExtensionPoints, ribbons, contextMenus);
context.setCurrentFunctionFileResid(null);
}
let addinCommandsExtensionPointsMobile = Converter._getAddinCommandsExtensionPoints(hostType, vo, constants_1.Constants.InputMobileFormFactor, this._xmlManifest);
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPointsMobile) && addinCommandsExtensionPointsMobile.length > 0) {
let functionFileResidVersion = Converter._getFunctionFileResid(hostType, vo, this._xmlManifest);
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion) && !utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion[constants_1.Constants.InputMobileFormFactor])) {
context.setCurrentFunctionFileResid(functionFileResidVersion[constants_1.Constants.InputMobileFormFactor]);
}
this._addRibbonOrContextMenuForManifestSection(context, hostType, vo, addinCommandsExtensionPointsMobile, ribbons, contextMenus);
context.setCurrentFunctionFileResid(null);
}
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
}
}
else {
utilities_1.Utilities.logError("Unsupported host skipping processing for host type: %s", hostType);
}
context.setManifestHostType(null);
}
_addRibbonOrContextMenuForManifestSection(context, versionOverrideHostIndex, versionOverrideIndex, addinCommandsExtensionPoints, ribbons, contextMenus) {
let len = addinCommandsExtensionPoints.length;
for (let idx = 0; idx < len; idx++) {
let extPoint = addinCommandsExtensionPoints[idx];
let extensionPointType = extPoint[constants_1.Constants.InputType];
if (Converter._isRibbonCommandSurface(extensionPointType)) {
context.setCurrentCommandSurfaceType(CommandSurfaceType.Ribbon);
let ribbon = new MOS.Ribbons();
Converter._incrementCurrentRibbonIndex(context);
ribbon.tabs = [];
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputTabs])) {
for (let tabIdx = 0; tabIdx < extPoint[constants_1.Constants.InputTabs].length; tabIdx++) {
const tab = extPoint[constants_1.Constants.InputTabs][tabIdx];
context.setCurrentTabIndex(tabIdx);
const mosTab = this._populateTab(context, tab);
context.setCurrentTabIndex(conversionContext_1.ConversionContext.UnsetIndex);
ribbon.tabs.push(mosTab);
}
}
ribbon.contexts = [];
ribbon.contexts.push(Converter._getRibbonContextFromCommandSurface(extPoint[constants_1.Constants.InputType]));
ribbon.requirements = new MOS.RequirementsExtensionElement();
this._populateRibbonAndContextMenuRequirements(context, ribbon.requirements);
utilities_1.Utilities.log("Adding ribbon for: %s and vo: %s", versionOverrideHostIndex, versionOverrideIndex);
ribbons.push(ribbon);
context.setCurrentCommandSurfaceType(CommandSurfaceType.None);
}
else if (Converter._isContextMenuCommandSurface(extensionPointType)) {
context.setCurrentCommandSurfaceType(CommandSurfaceType.ContextMenu);
let contextMenu = new MOS.ContextMenus;
if (context.getCurrentContextMenuIndex() === conversionContext_1.ConversionContext.UnsetIndex) {
context.setCurrentContextMenuIndex(0);
}
else {
context.setCurrentContextMenuIndex(context.getCurrentContextMenuIndex() + 1);
}
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputChildren])) {
for (let menuNodeIdx = 0; menuNodeIdx < extPoint[constants_1.Constants.InputChildren].length; menuNodeIdx++) {
const menuNode = extPoint[constants_1.Constants.InputChildren][menuNodeIdx];
const mosMenu = new MOS.ExtensionCommonCustomControlMenu();
context.setCurrentContextMenuMenuIndex(menuNodeIdx);
for (let menuControlIdx = 0; menuControlIdx < menuNode[constants_1.Constants.InputChildren].length; menuControlIdx++) {
const menuControl = menuNode[constants_1.Constants.InputChildren][menuControlIdx];
context.setCurrentContextMenuMenuControlIndex(menuControlIdx);
this._populateMenuControl(context, mosMenu, menuControl);
const mosContextMenuMenu = new MOS.Menus();
mosContextMenuMenu.type = menuNode[constants_1.Constants.InputType] === constants_1.Constants.InputContextMenuCell ?
MOS.MenusType.Cell : MOS.MenusType.Text;
for (let ctxmnIdx = 0; ctxmnIdx < mosMenu.items.length; ctxmnIdx++) {
mosContextMenuMenu.controls.push((mosMenu.items[ctxmnIdx]));
}
if (utilities_1.Utilities.isNullOrUndefined(contextMenu.menus)) {
contextMenu.menus = [];
}
contextMenu.menus.push(mosContextMenuMenu);
}
context.setCurrentContextMenuMenuControlIndex(conversionContext_1.ConversionContext.UnsetIndex);
}
context.setCurrentContextMenuMenuIndex(conversionContext_1.ConversionContext.UnsetIndex);
}
contextMenu.requirements = new MOS.RequirementsExtensionElement();
this._populateRibbonAndContextMenuRequirements(context, contextMenu.requirements);
utilities_1.Utilities.log("Adding contextMenu for: %s and vo: %s", versionOverrideHostIndex, versionOverrideIndex);
contextMenus.push(contextMenu);
context.setCurrentCommandSurfaceType(CommandSurfaceType.None);
}
else if (Converter._isMobileCommandSurface(extensionPointType)) {
context.setCurrentCommandSurfaceType(CommandSurfaceType.Ribbon);
let ribbon = new MOS.Ribbons();
ribbon.tabs = [];
ribbon.tabs[0] = new MOS.ExtensionRibbonsArrayTabsItem();
ribbon.tabs[0].customMobileRibbonGroups = [];
ribbon.tabs[0].groups = [];
let placeholderGroup = new MOS.ExtensionRibbonsCustomTabGroupsItem();
placeholderGroup.label = "placeholder";
placeholderGroup.controls = [];
let placeholderControl = new MOS.ExtensionCommonCustomGroupControlsItem();
placeholderControl.actionId = "";
placeholderControl.label = "";
placeholderControl.id = "";
placeholderControl.type = MOS.ExtensionCommonCustomGroupControlsItemType.Menu;
placeholderControl.icons = [];
let placeholderIcon = new MOS.ExtensionCommonIcon();
placeholderIcon.url = "https://placeholder";
placeholderIcon.size = 32;
placeholderControl.icons.push(placeholderIcon);
placeholderControl.supertip = new MOS.ExtensionCommonSuperToolTip();
placeholderControl.supertip.description = "";
placeholderControl.supertip.title = "";
placeholderGroup.controls.push(placeholderControl);
ribbon.tabs[0].groups.push(placeholderGroup);
let customMobileGroup = new MOS.ExtensionRibbonsCustomMobileGroupItem();
customMobileGroup.id = this._createUniqueId("customMobileGroup");
customMobileGroup.label = customMobileGroup.id;
ribbon.tabs[0].customMobileRibbonGroups[0] = customMobileGroup;
ribbon.tabs[0].id = this._createUniqueId("mobileTab");
ribbon.tabs[0].label = ribbon.tabs[0].id;
ribbon.contexts = [];
ribbon.contexts.push(Converter._getRibbonContextFromCommandSurface(extPoint[constants_1.Constants.InputType]));
ribbon.requirements = new MOS.RequirementsExtensionElement();
this._populateRibbonAndContextMenuRequirements(context, ribbon.requirements);
ribbon.requirements.formFactors = [];
ribbon.requirements.formFactors.push(MOS.FormFactors.Mobile);
var mobileControl = null;
switch (extensionPointType) {
case constants_1.Constants.InputMobileMessageReadCommandSurface:
case constants_1.Constants.InputMobileOnlineMeetingCommandSurface:
case constants_1.Constants.InputMobileLogEventAppointmentAttendee:
Converter._incrementCurrentRibbonIndex(context);
context.setCurrentTabIndex(0);
context.setCurrentCustomMobileGroupIndex(0);
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup])) {
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputId])) {
customMobileGroup.id = extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputId];
}
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputLabel]) ||
!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputLabelResId])) {
customMobileGroup.label = this._populateControlLocalizedField(context, extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputLabelResId], extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength32, ResourceType.AllLocaleShortStrings, constants_1.Constants.RibbonsTabsCustomMobileRibbonGroupsLabel);
}
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputControl])) {
mobileControl = extPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputControl];
}
}
else {
if (!utilities_1.Utilities.isNullOrUndefined(extPoint[constants_1.Constants.InputControl])) {
mobileControl = extPoint[constants_1.Constants.InputControl];
}
}
if (!utilities_1.Utilities.isNullOrUndefined(mobileControl)) {
context.setCurrentControlIndex(0);
customMobileGroup.controls = [];
customMobileGroup.controls[0] = new MOS.ExtensionRibbonsCustomMobileControlButtonItem();
this._populateMobileControlProperties(context, customMobileGroup.controls[0], mobileControl);
context.setCurrentControlIndex(conversionContext_1.ConversionContext.UnsetIndex);
}
context.setCurrentCustomMobileGroupIndex(conversionContext_1.ConversionContext.UnsetIndex);
context.setCurrentTabIndex(conversionContext_1.ConversionContext.UnsetIndex);
break;
case constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface:
case constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface:
case constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface:
break;
default:
utilities_1.Utilities.logError("Unrecognized mobile command surface: " + extensionPointType);
}
ribbon.tabs[0].customMobileRibbonGroups[0] = customMobileGroup;
utilities_1.Utilities.log("Adding ribbon for: %s and vo: %s", versionOverrideHostIndex, versionOverrideIndex);
ribbons.push(ribbon);
context.setCurrentCommandSurfaceType(CommandSurfaceType.None);
}
}
}
_populateRibbonAndContextMenuRequirements(context, requirements) {
this._addRequirementSubelementScopesFromHost(context, requirements);
requirements.formFactors.push(MOS.FormFactors.Desktop);
}
_addRequirementSubelementScopesFromHost(context, requirements) {
if (utilities_1.Utilities.isNullOrUndefined(requirements.scopes)) {
requirements.scopes = [];
}
let scope = Converter._getRequirementsScopeFromManifestHostType(context.getManifestHostType());
if (!utilities_1.Utilities.isNullOrUndefined(scope)) {
requirements.scopes.push(scope);
}
if (utilities_1.Utilities.isNullOrUndefined(requirements.formFactors)) {
requirements.formFactors = [];
}
Converter._mergeInVersionOverrideRequirements(context.getCurrentVersionOverrideCapabilities(), requirements);
}
static _mergeInVersionOverrideRequirements(versionOverrideCapabilities, requirements) {
if (utilities_1.Utilities.isNullOrUndefined(versionOverrideCapabilities)) {
return;
}
for (let capability of versionOverrideCapabilities) {
let matchingCapability = null;
if (utilities_1.Utilities.isNullOrUndefined(requirements.capabilities)) {
requirements.capabilities = [];
}
else {
matchingCapability = Converter._getMatchingCapability(requirements.capabilities, capability);
}
if (utilities_1.Utilities.isNullOrUndefined(matchingCapability)) {
requirements.capabilities.push(capability);
}
else {
let incomingMin = utilities_1.Utilities.isNullOrUndefined(capability.minVersion) ? null : +capability.minVersion;
let existingMin = utilities_1.Utilities.isNullOrUndefined(matchingCapability.minVersion) ? null : +matchingCapability.minVersion;
if (!utilities_1.Utilities.isNullOrUndefined(existingMin) && !Number.isNaN(existingMin) && !Number.isNaN(incomingMin)) {
if (incomingMin > existingMin) {
matchingCapability.minVersion = incomingMin.toString();
}
}
}
}
}
static _getMatchingCapability(capabilities, capability) {
for (let cap of capabilities) {
if (cap.name === capability.name) {
return cap;
}
}
return null;
}
static _capabilitiesContainCapability(capabilities, capability) {
for (let cap of capabilities) {
if (cap.name === capability.name &&
cap.maxVersion === capability.maxVersion &&
cap.minVersion === capability.minVersion) {
return true;
}
}
return false;
}
_populateTab(context, tab) {
let mosTab;
let mosGroups = [];
if (utilities_1.Utilities.isNullOrUndefined(tab[constants_1.Constants.InputLabel])) {
mosTab = new MOS.ExtensionRibbonsArrayTabsItem();
mosTab.builtInTabId = tab[constants_1.Constants.InputId];
}
else {
mosTab = new MOS.ExtensionRibbonsArrayTabsItem();
mosTab.id = tab[constants_1.Constants.InputId];
mosTab.label = tab[constants_1.Constants.InputLabel];
}
this._populateGroups(context, mosGroups, tab[constants_1.Constants.InputChildren]);
mosTab.groups = mosGroups;
return mosTab;
}
_populateGroups(context, mosGroups, groups) {
for (let idx = 0; idx < groups.length; idx++) {
let group = groups[idx];
let mosGroup = new MOS.ExtensionCommonCustomGroup();
context.setCurrentGroupIndex(idx);
this._populateGroup(context, mosGroup, group);
context.setCurrentGroupIndex(-1);
mosGroups.push(mosGroup);
}
}
_populateGroup(context, mosGroup, group) {
mosGroup.id = group[constants_1.Constants.InputId];
mosGroup.label = this._getResourceAndWriteLocalizedValues(group[constants_1.Constants.InputLabelResId], group[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength64, context.getCurrentVersionOverrideNumber(), constants_1.Constants.RibbonsTabsGroupsLabel, ResourceType.AllLocaleShortStrings, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentGroupIndex());
this._populateGroupIcons(context, mosGroup, group[constants_1.Constants.InputIcon], group[constants_1.Constants.InputIconResId]);
mosGroup.controls = [];
this._populateGroupControls(context, mosGroup.controls, group[constants_1.Constants.InputChildren]);
}
_populateGroupIcons(context, group, groupIcons, groupIconResIds) {
if (utilities_1.Utilities.isNullOrUndefined(groupIcons)) {
return;
}
let iconIdx = 0;
for (let size in groupIcons) {
const url = groupIcons[size];
const mosIcon = new MOS.ExtensionCommonIcon();
context.setCurrentIconIndex(iconIdx);
let fileShortName = this._iconBuilder.addIconAndGetReference(url, !utilities_1.Utilities._writeImageUrls, false);
mosIcon.url = fileShortName;
mosIcon.size = +size;
this._populateLocaleSensitiveProperty;
this._getResourceAndWriteLocalizedValues(groupIconResIds[size], fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.RibbonsTabsGroupsIconsUrl : constants_1.Constants.RibbonsTabsGroupsIconsFile, ResourceType.AllLocaleImages, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentGroupIndex(), context.getCurrentIconIndex(), conversionContext_1.ConversionContext.UnsetIndex);
if (utilities_1.Utilities.isNullOrUndefined(group.icons)) {
group.icons = [];
}
group.icons.push(mosIcon);
iconIdx++;
}
}
_createUniqueId(legacyId) {
let uniqueSuffix = this.getNextUniqueSuffix();
return legacyId + "_" + uniqueSuffix;
}
_createUniqueActionId(id) {
let uniqueSuffix = this.getNextActionSuffix();
return id + "_" + uniqueSuffix;
}
_createUniqueViewId(id) {
let uniqueSuffix = this.getNextViewSuffix();
return id + "_" + uniqueSuffix;
}
_populateGroupControls(context, mosControls, controls) {
for (let idx = 0; idx < controls.length; idx++) {
let control = controls[idx];
context.setCurrentControlIndex(idx);
switch (control[constants_1.Constants.InputControlType]) {
case constants_1.Constants.InputButton:
let buttonControl = new MOS.ExtensionCommonCustomGroupControlsItem();
this._populateButtonControl(context, buttonControl, control);
mosControls.push(buttonControl);
break;
case constants_1.Constants.InputMenu:
let menuControl = new MOS.ExtensionCommonCustomControlMenu();
this._populateMenuControl(context, menuControl, control);
mosControls.push(menuControl);
break;
default:
throw "need to handle legacy control type: " + control[constants_1.Constants.InputControlType];
}
}
context.setCurrentControlIndex(conversionContext_1.ConversionContext.UnsetIndex);
}
_populateMenuControl(context, menuControl, control) {
if (utilities_1.Utilities.isNullOrUndefined(control === null || control === void 0 ? void 0 : control[constants_1.Constants.InputChildren]) || control[constants_1.Constants.InputChildren].length == 0) {
return;
}
this._populateControlProperties(context, menuControl, control);
for (let idx = 0; idx < control[constants_1.Constants.InputChildren].length; idx++) {
let menuItemObject = control[constants_1.Constants.InputChildren][idx];
let menuItem = new MOS.ExtensionCommonCustomControlMenuItem();
context.setCurrentMenuItemIndex(idx);
context.setCurrentContextMenuMenuControlMenuItemIndex(idx);
this._populateMenuItem(context, menuItem, menuItemObject);
if (utilities_1.Utilities.isNullOrUndefined(menuControl.items)) {
menuControl.items = [];
}
menuControl.items.push(menuItem);
}
context.setCurrentMenuItemIndex(conversionContext_1.ConversionContext.UnsetIndex);
context.setCurrentContextMenuMenuControlIndex(conversionContext_1.ConversionContext.UnsetIndex);
}
_populateMenuItem(context, menuItemControl, control) {
let menuItemObject = control[constants_1.Constants.InputMenuItem];
this._populateControlProperties(context, menuItemControl, control);
}
_populateControlProperties(context, mosControl, control) {
let isRibbon = context.isInRibbon();
let isMenuItem = false;
if (control[constants_1.Constants.InputControlType] === constants_1.Constants.InputButton) {
let mosButton = mosControl;
mosButton.enabled = control[constants_1.Constants.InputEnabled];
mosButton.id = control[constants_1.Constants.InputId];
mosButton.label = this._populateControlLocalizedField(context, control[constants_1.Constants.InputLabelResId], control[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsLabel : constants_1.Constants.ContextMenusMenusControlsLabel);
mosButton.type = MOS.ExtensionCommonCustomGroupControlsItemType.Button;
mosButton.overriddenByRibbonApi = utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputOverridenByRibbonApi]) ? false :
control[constants_1.Constants.InputOverridenByRibbonApi];
}
else if (control[constants_1.Constants.InputControlType] === constants_1.Constants.InputMenuItem) {
let mosMenuItem = mosControl;
mosMenuItem.enabled = control[constants_1.Constants.InputEnabled];
mosMenuItem.id = control[constants_1.Constants.InputId];
mosMenuItem.label = this._populateControlLocalizedField(context, control[constants_1.Constants.InputLabelResId], control[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsItemsLabel : constants_1.Constants.ContextMenusMenusControlsItemsLabel);
mosMenuItem.type = MOS.ExtensionCommonCustomControlMenuItemType.MenuItem;
mosMenuItem.overriddenByRibbonApi = utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputOverridenByRibbonApi]) ? false :
control[constants_1.Constants.InputOverridenByRibbonApi];
isMenuItem = true;
}
else if (control[constants_1.Constants.InputControlType] === constants_1.Constants.InputMenu) {
let mosMenu = mosControl;
mosMenu.id = control[constants_1.Constants.InputId];
mosMenu.label = this._populateControlLocalizedField(context, control[constants_1.Constants.InputLabelResId], control[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsLabel : constants_1.Constants.ContextMenusMenusControlsLabel);
mosMenu.type = MOS.ExtensionCommonCustomControlMenuType.Menu;
mosMenu.overriddenByRibbonApi = utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputOverridenByRibbonApi]) ? false :
control[constants_1.Constants.InputOverridenByRibbonApi];
}
else {
utilities_1.Utilities.logError("Unrecognized control: " + control[constants_1.Constants.InputControlType]);
return;
}
if (control[constants_1.Constants.InputControlType] !== constants_1.Constants.InputMenu) {
this._populateControlAction(context, mosControl, control);
}
this._populateControlSupertip(context, mosControl, control);
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputIcon])) {
mosControl[constants_1.Constants.MosIcons] = [];
this._populateControlIcons(context, mosControl[constants_1.Constants.MosIcons], control[constants_1.Constants.InputIcon], control[constants_1.Constants.InputIconResId], isMenuItem);
}
}
_populateMobileControlProperties(context, mosMobileControl, control) {
mosMobileControl.type = MOS.ExtensionRibbonsCustomMobileControlButtonItemType.MobileButton;
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputLabel]) || !utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputLabelResId])) {
mosMobileControl.label = this._populateControlLocalizedField(context, control[constants_1.Constants.InputLabelResId], control[constants_1.Constants.InputLabel], constants_1.Constants.MaxResourceStringLength32, ResourceType.AllLocaleShortStrings, constants_1.Constants.RibbonsTabsCustomMobileRibbonGroupsControlsLabel);
}
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction])) {
this._populateControlAction(context, mosMobileControl, control);
}
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputId])) {
mosMobileControl.id = control[constants_1.Constants.InputId];
}
else {
mosMobileControl.id = this._createUniqueId("mobileControl");
}
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputIcon])) {
mosMobileControl.icons = [];
this._populateMobileControlIcon(context, mosMobileControl.icons, control[constants_1.Constants.InputIcon]);
}
}
_populateMobileControlIcon(context, mosMobileControlIcons, icon) {
if (!utilities_1.Utilities.isNullOrUndefined(icon) && !utilities_1.Utilities.isNullOrUndefined(icon[constants_1.Constants.InputImages])) {
context.setCurrentIconIndex(0);
for (var idx = 0; idx < icon[constants_1.Constants.InputImages].length; idx++) {
let image = icon[constants_1.Constants.InputImages][idx];
let mosIcon = new MOS.ExtensionCustomMobileIcon();
if (!utilities_1.Utilities.isNullOrUndefined(image[constants_1.Constants.InputScale])) {
mosIcon.scale = Number(image[constants_1.Constants.InputScale]);
}
if (!utilities_1.Utilities.isNullOrUndefined(image[constants_1.Constants.InputSize])) {
mosIcon.size = Number(image[constants_1.Constants.InputSize]);
}
if (!utilities_1.Utilities.isNullOrUndefined(image[constants_1.Constants.InputResid])) {
mosIcon.url = this._getResourceAndWriteLocalizedValues(image[constants_1.Constants.InputResid], null, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), constants_1.Constants.RibbonsTabsCustomMobileRibbonGroupsControlsIconsUrl, ResourceType.AllLocaleImages, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentCustomMobileGroupIndex(), context.getCurrentControlIndex(), context.getCurrentIconIndex());
}
mosMobileControlIcons.push(mosIcon);
context.setCurrentIconIndex(context.getCurrentIconIndex() + 1);
}
}
context.setCurrentIconIndex(conversionContext_1.ConversionContext.UnsetIndex);
}
_populateControlLocalizedField(context, labelResId, defaultValue, maxLength, resourceType, resourceString) {
if (context.isInRibbon()) {
return this._getResourceAndWriteLocalizedValues(labelResId, defaultValue, maxLength, context.getCurrentVersionOverrideNumber(), resourceString, resourceType, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentCustomMobileGroupIndex() == conversionContext_1.ConversionContext.UnsetIndex ? context.getCurrentGroupIndex() : context.getCurrentCustomMobileGroupIndex(), context.getCurrentControlIndex(), context.getCurrentMenuItemIndex());
}
else {
return this._getResourceAndWriteLocalizedValues(labelResId, defaultValue, maxLength, context.getCurrentVersionOverrideNumber(), resourceString, resourceType, context.getCurrentContextMenuIndex(), context.getCurrentContextMenuMenuIndex(), context.getCurrentContextMenuMenuControlIndex(), context.getCurrentContextMenuMenuControlMenuItemIndex(), conversionContext_1.ConversionContext.UnsetIndex);
}
}
_populateButtonControl(context, buttonControl, control) {
this._populateControlProperties(context, buttonControl, control);
}
_populateControlAction(context, mosControl, control) {
if (!utilities_1.Utilities.isNullOrUndefined(control) &&
!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction])) {
let runtimeUrl = null;
let functionName = control[constants_1.Constants.InputAction][constants_1.Constants.InputFunctionName];
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputSourceLocationResid])) {
runtimeUrl = control[constants_1.Constants.InputAction][constants_1.Constants.InputSourceLocationResid];
}
else if (!utilities_1.Utilities.isNullOrUndefined(functionName)) {
runtimeUrl = context.getCurrentFunctionFileResid();
}
let runtime = null;
let runtimeLookupKey = Converter._generateRuntimeLookupKey(runtimeUrl, MOS.RuntimesLifetime.Short, context.getCurrentVersionOverrideCapabilities());
if (!utilities_1.Utilities.isNullOrUndefined(runtimeLookupKey)) {
runtime = this._runtimeLookup[runtimeLookupKey];
}
if (utilities_1.Utilities.isNullOrUndefined(runtime)) {
utilities_1.Utilities.assert(!utilities_1.Utilities.isNullOrUndefined(runtime), "Expected runtime to be cached.");
utilities_1.Utilities.logError("Did not find runtime. " + runtimeLookupKey);
return;
}
let actionId = constants_1.Constants.InputAction;
if (!utilities_1.Utilities.isNullOrUndefined(functionName)) {
actionId = functionName;
}
else {
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputTaskpaneId])) {
actionId = control[constants_1.Constants.InputAction][constants_1.Constants.InputTaskpaneId];
}
actionId = this._createUniqueActionId(actionId);
}
if (utilities_1.Utilities.isNullOrUndefined(runtime.actions)) {
runtime.actions = [];
}
if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputSourceLocationResid])) {
let action = new MOS.ExtensionRuntimesActionsItem();
action.id = actionId;
action.pinnable = control[constants_1.Constants.InputAction][constants_1.Constants.InputPinnable];
if (utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputTaskpaneId])) {
action.view = this._createUniqueViewId(constants_1.Constants.MosView);
}
else {
action.view = control[constants_1.Constants.InputAction][constants_1.Constants.InputTaskpaneId];
}
action.displayName = actionId;
action.type = MOS.ExtensionRuntimesActionsItemType.OpenPage;
utilities_1.Utilities.log("Adding ShowTaskpane action: " + action.id);
runtime.actions.push(action);
}
else if (!utilities_1.Utilities.isNullOrUndefined(control[constants_1.Constants.InputAction][constants_1.Constants.InputFunctionName])) {
let action = new MOS.ExtensionRuntimesActionsItem();
action.id = actionId;
action.displayName = actionId;
action.type = MOS.ExtensionRuntimesActionsItemType.ExecuteFunction;
utilities_1.Utilities.log("Adding ExecuteAction action: " + action.id);
runtime.actions.push(action);
}
mosControl[constants_1.Constants.MosActionId] = actionId;
}
else {
utilities_1.Utilities.logError("Expected action and sourceLocation in button or menu control.");
}
}
_controlTypeFromString(controlType) {
if (!utilities_1.Utilities.isNullOrUndefined(controlType)) {
switch (controlType) {
case constants_1.Constants.InputButton:
return MOS.ExtensionCommonCustomGroupControlsItemType.Button;
}
}
throw "unable to find control type:" + controlType;
}
_populateControlIcons(context, mosControlIcons, icons, iconResIds, isMenuItem) {
if (utilities_1.Utilities.isNullOrUndefined(icons)) {
return;
}
let iconIdx = 0;
for (let size in icons) {
const url = icons[size];
const resId = iconResIds[size];
context.setCurrentIconIndex(iconIdx);
const mosIcon = new MOS.ExtensionCommonIcon();
let fileShortName = this._iconBuilder.addIconAndGetReference(url, !utilities_1.Utilities._writeImageUrls, false);
if (context.isInRibbon()) {
if (isMenuItem) {
this._getResourceAndWriteLocalizedValues(resId, fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.RibbonsTabsGroupsControlsItemsIconsUrl : constants_1.Constants.RibbonsTabsGroupsControlsItemsIconsFile, ResourceType.AllLocaleImages, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentGroupIndex(), context.getCurrentControlIndex(), context.getCurrentMenuItemIndex(), context.getCurrentIconIndex());
}
else {
this._getResourceAndWriteLocalizedValues(resId, fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.RibbonsTabsGroupsControlsIconsUrl : constants_1.Constants.RibbonsTabsGroupsControlsIconsFile, ResourceType.AllLocaleImages, context.getCurrentRibbonIndex(), context.getCurrentTabIndex(), context.getCurrentGroupIndex(), context.getCurrentControlIndex(), context.getCurrentIconIndex());
}
}
else {
if (isMenuItem) {
this._getResourceAndWriteLocalizedValues(resId, fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.ContextMenusMenusControlsItemsIconsUrl : constants_1.Constants.ContextMenusMenusControlsItemsIconsFile, ResourceType.AllLocaleImages, context.getCurrentContextMenuIndex(), context.getCurrentContextMenuMenuIndex(), context.getCurrentContextMenuMenuControlIndex(), context.getCurrentContextMenuMenuControlMenuItemIndex(), context.getCurrentIconIndex(), conversionContext_1.ConversionContext.UnsetIndex);
}
else {
this._getResourceAndWriteLocalizedValues(resId, fileShortName, constants_1.Constants.MaxResourceStringLength2048, context.getCurrentVersionOverrideNumber(), utilities_1.Utilities._writeImageUrls ? constants_1.Constants.ContextMenusMenusControlsIconsUrl : constants_1.Constants.ContextMenusMenusControlsIconsFile, ResourceType.AllLocaleImages, context.getCurrentContextMenuIndex(), context.getCurrentContextMenuMenuIndex(), context.getCurrentContextMenuMenuControlIndex(), context.getCurrentIconIndex(), conversionContext_1.ConversionContext.UnsetIndex);
}
}
mosIcon.url = fileShortName;
mosIcon.size = +size;
mosControlIcons.push(mosIcon);
iconIdx++;
}
}
_populateControlSupertip(context, mosControl, control) {
let supertip = control[constants_1.Constants.InputSupertip];
if (utilities_1.Utilities.isNullOrUndefined(supertip)) {
return;
}
let isRibbon = context.isInRibbon();
if (mosControl[constants_1.Constants.MosType] === MOS.ExtensionCommonCustomGroupControlsItemType.Button) {
let mosButton = mosControl;
mosButton.supertip = new MOS.ExtensionCommonSuperToolTip();
mosButton.supertip.description = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputDescriptionResId], supertip[constants_1.Constants.InputDescription], constants_1.Constants.MaxResourceStringLength128, ResourceType.AllLocaleLongStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsSupertipDescription : constants_1.Constants.ContextMenusMenusControlsSupertipDescription);
mosButton.supertip.title = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputTitleResId], supertip[constants_1.Constants.InputTitle], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsSupertipTitle : constants_1.Constants.ContextMenusMenusControlsSupertipTitle);
}
else if (mosControl[constants_1.Constants.MosType] === MOS.ExtensionCommonCustomControlMenuItemType.MenuItem) {
let mosMenuItem = mosControl;
mosMenuItem.supertip = new MOS.ExtensionCommonSuperToolTip();
mosMenuItem.supertip.description = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputDescriptionResId], supertip[constants_1.Constants.InputDescription], constants_1.Constants.MaxResourceStringLength128, ResourceType.AllLocaleLongStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsItemsSupertipDescription : constants_1.Constants.ContextMenusMenusControlsItemsSupertipDescription);
mosMenuItem.supertip.title = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputTitleResId], supertip[constants_1.Constants.InputTitle], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsItemsSupertipTitle : constants_1.Constants.ContextMenusMenusControlsItemsSupertipTitle);
}
else if (mosControl[constants_1.Constants.MosType] === MOS.ExtensionCommonCustomControlMenuType.Menu) {
let mosMenu = mosControl;
mosMenu.supertip = new MOS.ExtensionCommonSuperToolTip();
mosMenu.supertip.description = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputDescriptionResId], supertip[constants_1.Constants.InputDescription], constants_1.Constants.MaxResourceStringLength128, ResourceType.AllLocaleLongStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsSupertipDescription : constants_1.Constants.ContextMenusMenusControlsSupertipDescription);
mosMenu.supertip.title = this._populateControlLocalizedField(context, supertip[constants_1.Constants.InputTitleResId], supertip[constants_1.Constants.InputTitle], constants_1.Constants.MaxResourceStringLength64, ResourceType.AllLocaleShortStrings, isRibbon ? constants_1.Constants.RibbonsTabsGroupsControlsSupertipTitle : constants_1.Constants.ContextMenusMenusControlsSupertipTitle);
}
else {
utilities_1.Utilities.logError("Unexpected control: " + control[constants_1.Constants.InputControlType]);
}
}
_addScopesFromHosts(requirements) {
requirements.scopes = [];
for (let host in this._xmlManifest.getHosts()) {
switch (this._xmlManifest.getHosts()[host]) {
case osfmos_1.OSF.ManifestHostType.Workbook:
requirements.scopes.push(MOS.Scopes.Workbook);
break;
case osfmos_1.OSF.ManifestHostType.Document:
requirements.scopes.push(MOS.Scopes.Document);
break;
case osfmos_1.OSF.ManifestHostType.Presentation:
requirements.scopes.push(MOS.Scopes.Presentation);
break;
case osfmos_1.OSF.ManifestHostType.Notebook:
utilities_1.Utilities.assert(false, "need to implement notebook scope");
break;
case osfmos_1.OSF.ManifestHostType.Mailbox:
requirements.scopes.push(MOS.Scopes.Mail);
break;
case osfmos_1.OSF.ManifestHostType.Drawing:
utilities_1.Utilities.assert(false, "need to implement drawing scope");
break;
}
}
if (requirements.scopes.length == 0) {
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._hostType) && this._xmlManifest.getTarget() == osfmos_1.OSF.OfficeAppType.MailApp) {
requirements.scopes.push(MOS.Scopes.Mail);
}
}
}
_populateRuntimes(context, extension) {
let runtimes = [];
let collectedRuntimeRecords = [];
this._collectRuntimes(context, collectedRuntimeRecords);
this._runtimeLookup = {};
this._createMosRuntimesFromRuntimeRecords(collectedRuntimeRecords, runtimes, this._runtimeLookup);
extension.runtimes = runtimes;
}
_createMosRuntimesFromRuntimeRecords(runtimeRecords, runtimes, runtimeLookup) {
if (this._xmlManifest.getTarget() != osfmos_1.OSF.OfficeAppType.TaskPaneApp && this._xmlManifest.getTarget() != osfmos_1.OSF.OfficeAppType.MailApp) {
return;
}
if (runtimeRecords.length == 0) {
console.error('\x1b[31m%s\x1b[0m', 'No supported runtime found in "' + utilities_1.Utilities._inputXmlFilePath + '", so the converted manifest is invalid. ' +
'Please note that some elements such as ContentPane and DetectedEntity are not supported by metaOS manifest.');
process.exitCode = 1;
}
let idxRuntime = -1;
for (let idxRuntimeRecord = 0; idxRuntimeRecord < runtimeRecords.length; idxRuntimeRecord++) {
let runtimeRecord = runtimeRecords[idxRuntimeRecord];
let key = runtimeRecord.getKey();
let runtime = runtimeLookup[key];
if (utilities_1.Utilities.isNullOrUndefined(runtime)) {
runtime = new MOS.Runtimes();
idxRuntime++;
runtime.id = "runtime_" + this.getNextRuntimeSuffix();
runtime.requirements = Converter._cloneRequirements(runtimeRecord._requirements);
runtime.requirements.capabilities = runtimeRecord._versionOverrideCapabilities;
runtime.type = MOS.RuntimesType.General;
runtime.lifetime = runtimeRecord._lifetime;
if (runtimeRecord._source == RuntimeSource.ShowTaskpane ||
runtimeRecord._source == RuntimeSource.ExecuteFunction ||
runtimeRecord._source == RuntimeSource.SharedRuntimes ||
runtimeRecord._source == RuntimeSource.LaunchEvent) {
runtime.code.page = this._getResourceAndWriteLocalizedValues(runtimeRecord._resource, null, constants_1.Constants.MaxResourceStringLength2048, runtimeRecord._versionOverridesNumber, constants_1.Constants.RuntimesPage, ResourceType.AllLocaleUrls, idxRuntime);
if (!utilities_1.Utilities.isNullOrUndefined(runtimeRecord._scriptResId)) {
runtime.code.script = this._getResourceAndWriteLocalizedValues(runtimeRecord._scriptResId, null, constants_1.Constants.MaxResourceStringLength2048, runtimeRecord._versionOverridesNumber, constants_1.Constants.RuntimesScript, ResourceType.AllLocaleUrls, idxRuntime);
}
}
else if (runtimeRecord._source == RuntimeSource.DefaultSettingSourceLocations) {
runtime.code.page = runtimeRecord._localeResources[this._xmlManifest.getDefaultLocale()];
}
else {
utilities_1.Utilities.logError("Unrecognized runtimerecord._source: " + runtimeRecord._source + "runtime.source: " + runtimeRecord._source);
}
utilities_1.Utilities.assert(!utilities_1.Utilities.isNullOrUndefined(runtime.code.page), "runtime.code.page should not be null");
runtimes.push(runtime);
runtimeLookup[key] = runtime;
if (!utilities_1.Utilities.isNullOrUndefined(runtimeRecord._localeResources)) {
for (let locale in runtimeRecord._localeResources) {
if (locale == this._xmlManifest.getDefaultLocale()) {
continue;
}
let resourceTemplate = "";
if (!utilities_1.Utilities.isNullOrUndefined(runtime.code.page)) {
resourceTemplate = constants_1.Constants.RuntimesPage;
let resourceName = util.format(resourceTemplate, idxRuntime);
this._localeBuilder.addLocaleString(locale, resourceName, runtimeRecord._localeResources[locale]);
}
if (!utilities_1.Utilities.isNullOrUndefined(runtime.code.script)) {
resourceTemplate = constants_1.Constants.RuntimesScript;
let resourceName = util.format(resourceTemplate, idxRuntime);
this._localeBuilder.addLocaleString(locale, resourceName, runtimeRecord._localeResources[locale]);
}
}
}
}
}
}
_collectRuntimes(context, collectedRuntimes) {
for (let formFactor in osfmos_1.OSF.FormFactor) {
try {
let formFactorsSourceLocation = this._xmlManifest.getDefaultSourceLocation(formFactor);
if (!utilities_1.Utilities.isNullOrUndefined(formFactorsSourceLocation)) {
this._addRuntimeForFormFactor(collectedRuntimes, formFactor, formFactorsSourceLocation);
}
}
catch (_a) {
continue;
}
}
for (let manifestHostType in osfmos_1.OSF.ManifestHostType) {
if (manifestHostType === osfmos_1.OSF.ManifestHostType.Mailbox ||
manifestHostType === osfmos_1.OSF.ManifestHostType.Document ||
manifestHostType === osfmos_1.OSF.ManifestHostType.Presentation ||
manifestHostType === osfmos_1.OSF.ManifestHostType.Workbook) {
let hostType = Converter._getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType);
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType])) {
if (Converter._isWXP(hostType)) {
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, osfmos_1.OSF.VersionOverridesNumber.V1_0.toString());
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType]._runtimes)) {
this._collectRuntimeRecordsFromRuntimes(context, collectedRuntimes, this._xmlManifest._versionOverrides[hostType]._runtimes, manifestHostType, RuntimeSource.SharedRuntimes);
}
let addinCommandsExtensionPoints = Converter._getAddinCommandsExtensionPoints(hostType, null, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
let functionFileResid = Converter._getFunctionFileResid(hostType, null, this._xmlManifest);
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid)) {
this._collectRuntimesFromFunctionFiles(context, functionFileResid, collectedRuntimes, manifestHostType);
}
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPoints)) {
this._collectRuntimeRecordsFromExtensionPoints(context, addinCommandsExtensionPoints, collectedRuntimes, manifestHostType);
}
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
}
else if (hostType === constants_1.Constants.InputMailHost) {
let supportedVersionOverrides = Converter._getMailHostVersionOVerrides();
for (let vo of supportedVersionOverrides) {
Converter._setVersionOverrideNumberAndCapabilitiesInContext(context, this._xmlManifest, hostType, vo);
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType][vo])) {
if (!utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType][vo]._runtimes)) {
this._collectRuntimeRecordsFromRuntimes(context, collectedRuntimes, this._xmlManifest._versionOverrides[hostType][vo]._runtimes, manifestHostType, RuntimeSource.SharedRuntimes);
}
let addinCommandsExtensionPointsVersionsDesktop = Converter._getAddinCommandsExtensionPoints(hostType, vo, constants_1.Constants.InputDesktopFormFactor, this._xmlManifest);
let addinCommandsExtensionPointsVersionsMobile = Converter._getAddinCommandsExtensionPoints(hostType, vo, constants_1.Constants.InputMobileFormFactor, this._xmlManifest);
let functionFileResidVersion = Converter._getFunctionFileResid(hostType, vo, this._xmlManifest);
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResidVersion)) {
this._collectRuntimesFromFunctionFiles(context, functionFileResidVersion, collectedRuntimes, manifestHostType);
}
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPointsVersionsDesktop)) {
this._collectRuntimeRecordsFromExtensionPoints(context, addinCommandsExtensionPointsVersionsDesktop, collectedRuntimes, manifestHostType);
}
if (!utilities_1.Utilities.isNullOrUndefined(addinCommandsExtensionPointsVersionsMobile)) {
this._collectRuntimeRecordsFromExtensionPoints(context, addinCommandsExtensionPointsVersionsMobile, collectedRuntimes, manifestHostType);
}
Converter._clearVersionOverrideNumberAndCapabilitiesInContext(context);
}
}
}
}
}
}
}
_collectRuntimeRecordsFromExtensionPoints(context, addinCommandsExtensionPoints, collectedRuntimes, manifestHostType) {
for (let extensionPointIdx = 0; extensionPointIdx < addinCommandsExtensionPoints.length; extensionPointIdx++) {
let extensionPoint = addinCommandsExtensionPoints[extensionPointIdx];
if (Converter._isRibbonCommandSurface(extensionPoint[constants_1.Constants.InputType])) {
if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputTabs])) {
for (let tabIdx = 0; tabIdx < extensionPoint[constants_1.Constants.InputTabs].length; tabIdx++) {
var tab = extensionPoint[constants_1.Constants.InputTabs][tabIdx];
if (!utilities_1.Utilities.isNullOrUndefined(tab[constants_1.Constants.InputChildren])) {
for (let groupIdx = 0; groupIdx < tab[constants_1.Constants.InputChildren].length; groupIdx++) {
var group = tab[constants_1.Constants.InputChildren][groupIdx];
if (!utilities_1.Utilities.isNullOrUndefined(group) && !utilities_1.Utilities.isNullOrUndefined(group[constants_1.Constants.InputChildren])) {
this._collectRuntimeRecordsFromActions(context, collectedRuntimes, group[constants_1.Constants.InputChildren], manifestHostType);
}
}
}
}
}
}
else if (Converter._isMobileCommandSurface(extensionPoint[constants_1.Constants.InputType])) {
var control;
if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputGroup]) &&
!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputControl])) {
control = extensionPoint[constants_1.Constants.InputGroup][constants_1.Constants.InputControl];
}
else if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputControl])) {
control = extensionPoint[constants_1.Constants.InputControl];
}
if (utilities_1.Utilities.isNullOrUndefined(control)) {
utilities_1.Utilities.logError("Unable to find <Control> inside of mobile form factor.");
continue;
}
let requirements = new MOS.RequirementsExtensionElement();
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
if (control.actionType == constants_1.Constants.InputShowTaskpane &&
!utilities_1.Utilities.isNullOrUndefined(control.action.sourceLocationResid)) {
let runtimeRecord = this._createRuntimeRecord(context, control.action.sourceLocationResid, requirements, RuntimeSource.ShowTaskpane, manifestHostType);
this._addRuntimeRecord(runtimeRecord, collectedRuntimes);
}
}
else if (Converter._isContextMenuCommandSurface(extensionPoint[constants_1.Constants.InputType])) {
if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputChildren])) {
for (let menuNodeIdx = 0; menuNodeIdx < extensionPoint[constants_1.Constants.InputChildren].length; menuNodeIdx++) {
const menuNode = extensionPoint[constants_1.Constants.InputChildren][menuNodeIdx];
for (let menuControlIdx = 0; menuControlIdx < menuNode[constants_1.Constants.InputChildren].length; menuControlIdx++) {
const menuControl = menuNode[constants_1.Constants.InputChildren][menuControlIdx];
this._collectRuntimeRecordsFromActions(context, collectedRuntimes, menuControl[constants_1.Constants.InputChildren], manifestHostType);
}
}
}
}
else if (extensionPoint[constants_1.Constants.InputType] === constants_1.Constants.InputLaunchEvent) {
if (!utilities_1.Utilities.isNullOrUndefined(extensionPoint[constants_1.Constants.InputResid])) {
let requirements = new MOS.RequirementsExtensionElement();
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
let runtimeRecord = this._createRuntimeRecord(context, extensionPoint[constants_1.Constants.InputResid], requirements, RuntimeSource.LaunchEvent, manifestHostType);
this._addRuntimeRecord(runtimeRecord, collectedRuntimes);
}
else {
utilities_1.Utilities.logWarning("LaunchEvent extension point does not have SourceLocation with resid.");
}
}
else {
utilities_1.Utilities.log("Skipping extension point %s for runtime collection.", extensionPoint[constants_1.Constants.InputType]);
}
}
}
_collectRuntimesFromFunctionFiles(context, functionFileResid, collectedRuntimes, manifestHostType) {
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid)) {
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid[constants_1.Constants.InputDesktopFormFactor])) {
this._addRuntimeRecordForFunctionFileFormFactor(context, functionFileResid[constants_1.Constants.InputDesktopFormFactor], constants_1.Constants.InputDesktopFormFactor, collectedRuntimes, manifestHostType);
}
if (!utilities_1.Utilities.isNullOrUndefined(functionFileResid[constants_1.Constants.InputMobileFormFactor])) {
this._addRuntimeRecordForFunctionFileFormFactor(context, functionFileResid[constants_1.Constants.InputMobileFormFactor], constants_1.Constants.InputMobileFormFactor, collectedRuntimes, manifestHostType);
}
}
}
_addRuntimeRecordForFunctionFileFormFactor(context, resid, formFactor, collectedRuntimes, manifestHostType) {
let requirements = new MOS.RequirementsExtensionElement();
requirements.formFactors = [];
requirements.formFactors.push(Converter._legacyFormFactorToMOSFormFactor(formFactor));
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
let runtimeRecord = this._createRuntimeRecord(context, resid, requirements, RuntimeSource.ExecuteFunction, manifestHostType);
this._addRuntimeRecord(runtimeRecord, collectedRuntimes);
}
static _legacyFormFactorToMOSFormFactor(formFactor) {
switch (formFactor) {
case constants_1.Constants.InputDesktopFormFactor:
return MOS.FormFactors.Desktop;
case constants_1.Constants.InputMobileFormFactor:
return MOS.FormFactors.Mobile;
default:
utilities_1.Utilities.logError("Unrecognized formfactor: " + formFactor);
return null;
}
}
static _isRibbonCommandSurface(commandSurface) {
return commandSurface === constants_1.Constants.InputPrimaryCommandSurface ||
commandSurface === constants_1.Constants.InputMessageComposeCommandSurface ||
commandSurface === constants_1.Constants.InputMessageReadCommandSurface ||
commandSurface === constants_1.Constants.InputAppointmentOrganizerCommandSurface ||
commandSurface === constants_1.Constants.InputAppointmentAttendeeCommandSurface;
}
static _isContextMenuCommandSurface(commandSurface) {
return commandSurface === constants_1.Constants.InputContextMenuCommandSurface;
}
static _isMobileCommandSurface(commandSurface) {
return commandSurface === constants_1.Constants.InputMobileMessageReadCommandSurface ||
commandSurface === constants_1.Constants.InputMobileMessageComposeCommandSurface ||
commandSurface === constants_1.Constants.InputMobileAppointmentOrganizerCommandSurface ||
commandSurface === constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface ||
commandSurface === constants_1.Constants.InputMobileOnlineMeetingCommandSurface ||
commandSurface === constants_1.Constants.InputMobileLogEventAppointmentAttendee;
}
static _getRibbonContextFromCommandSurface(commandSurface) {
switch (commandSurface) {
case constants_1.Constants.InputPrimaryCommandSurface:
return MOS.Contexts.Default;
case constants_1.Constants.InputMessageComposeCommandSurface:
return MOS.Contexts.MailCompose;
case constants_1.Constants.InputMessageReadCommandSurface:
return MOS.Contexts.MailRead;
case constants_1.Constants.InputAppointmentOrganizerCommandSurface:
return MOS.Contexts.MeetingDetailsOrganizer;
case constants_1.Constants.InputAppointmentAttendeeCommandSurface:
return MOS.Contexts.MeetingDetailsAttendee;
case constants_1.Constants.InputMobileLogEventAppointmentAttendee:
return MOS.Contexts.LogEventMeetingDetailsAttendee;
case constants_1.Constants.InputMobileMessageReadCommandSurface:
case constants_1.Constants.InputMobileMessageComposeCommandSurface:
return MOS.Contexts.Default;
case constants_1.Constants.InputMobileAppointmentAttendeeCommandSurface:
return MOS.Contexts.MeetingDetailsAttendee;
case constants_1.Constants.InputMobileAppointmentOrganizerCommandSurface:
return MOS.Contexts.MeetingDetailsOrganizer;
case constants_1.Constants.InputMobileOnlineMeetingCommandSurface:
return MOS.Contexts.OnlineMeetingDetailsOrganizer;
default:
utilities_1.Utilities.logError("Unsupported command surface: " + commandSurface);
return MOS.Contexts.Default;
}
}
static _getFunctionFileResid(versionOverrideHostIndex, versionOverrideIndex, xmlManifest) {
let functionFileResid = null;
if (!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex])) {
if (utilities_1.Utilities.isNullOrUndefined(versionOverrideIndex) && !utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][constants_1.Constants.InputFunctionFileResid])) {
functionFileResid = xmlManifest._versionOverrides[versionOverrideHostIndex][constants_1.Constants.InputFunctionFileResid];
}
else if (!utilities_1.Utilities.isNullOrUndefined(versionOverrideIndex) &&
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex]) &&
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputFunctionFileResid])) {
functionFileResid = xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputFunctionFileResid];
}
}
return functionFileResid;
}
static _getAddinCommandsExtensionPoints(versionOverrideHostIndex, versionOverrideIndex, formFactor, xmlManifest) {
let addinCommandsExtensionPoints = null;
if (!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex])) {
if (utilities_1.Utilities.isNullOrUndefined(versionOverrideIndex) && !utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][constants_1.Constants.InputAddinCommandsExtensionPoints])) {
addinCommandsExtensionPoints = xmlManifest._versionOverrides[versionOverrideHostIndex][constants_1.Constants.InputAddinCommandsExtensionPoints][formFactor];
}
else if (!utilities_1.Utilities.isNullOrUndefined(versionOverrideIndex) &&
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex]) &&
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputAddinCommandsExtensionPoints] &&
!utilities_1.Utilities.isNullOrUndefined(xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputAddinCommandsExtensionPoints][formFactor]))) {
addinCommandsExtensionPoints = xmlManifest._versionOverrides[versionOverrideHostIndex][versionOverrideIndex][constants_1.Constants.InputAddinCommandsExtensionPoints][formFactor];
}
}
return addinCommandsExtensionPoints;
}
static _cloneRequirements(requirements) {
if (utilities_1.Utilities.isNullOrUndefined(requirements)) {
return null;
}
let req = new MOS.RequirementsExtensionElement();
if (utilities_1.Utilities.isNullOrUndefined(requirements.capabilities)) {
req.capabilities = undefined;
}
else {
req.capabilities = Converter._cloneCapabilities(requirements.capabilities);
}
req.formFactors = !utilities_1.Utilities.isNullOrUndefined(requirements.formFactors) ? requirements.formFactors.map((x) => x) : undefined;
req.formFactors = !utilities_1.Utilities.isNullOrUndefined(requirements.formFactors) ? requirements.formFactors.map((x) => x) : undefined;
req.scopes = !utilities_1.Utilities.isNullOrUndefined(requirements.scopes) ? requirements.scopes.map((x) => x) : undefined;
return req;
}
static _cloneCapabilities(capabilities) {
if (utilities_1.Utilities.isNullOrUndefined(capabilities)) {
return undefined;
}
let caps = [];
for (let i = 0; i < capabilities.length; i++) {
let capability = capabilities[i];
let cap = new MOS.Capabilities();
cap.name = capability.name;
cap.minVersion = capability.minVersion;
cap.maxVersion = capability.maxVersion;
caps.push(cap);
}
return caps;
}
_addRuntimeForFormFactor(runtimeRecords, formFactor, sourceLocation) {
let runtimeRecord = this._createRuntimeRecord(null, sourceLocation, new MOS.RequirementsExtensionElement(), RuntimeSource.DefaultSettingSourceLocations, null);
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
let localeSourceLocation = this._xmlManifest.getSourceLocation(seenLocale, formFactor);
if (!utilities_1.Utilities.isNullOrUndefined(localeSourceLocation)) {
runtimeRecord._localeResources[seenLocale] = localeSourceLocation;
}
}
this._addRuntimeRecord(runtimeRecord, runtimeRecords);
}
_collectRuntimeRecordsFromRuntimes(context, runtimeRecords, runtimes, manifestHostType, source) {
let requirements = new MOS.RequirementsExtensionElement();
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
for (let idx = 0; idx < runtimes.getRuntimes().length; idx++) {
let runtime = runtimes.getRuntimes()[idx];
let scriptResId;
let lifetime = MOS.RuntimesLifetime.Short;
if (!utilities_1.Utilities.isNullOrUndefined(runtime.Overrides)) {
for (let override of runtime.Overrides) {
if (override.Type === "javascript") {
scriptResId = override.Resid;
break;
}
}
}
if (runtime.LifeTime === InputRuntimeLifeTime.Long) {
lifetime = MOS.RuntimesLifetime.Long;
}
let runtimeRecord = this._createRuntimeRecord(context, runtime.Resid, requirements, source, manifestHostType, scriptResId, lifetime);
this._addRuntimeRecord(runtimeRecord, runtimeRecords);
}
}
_collectRuntimeRecordsFromActions(context, runtimeRecords, controls, manifestHostType) {
if (utilities_1.Utilities.isNullOrUndefined(controls === null || controls === void 0 ? void 0 : controls.length))
return;
let requirements = new MOS.RequirementsExtensionElement();
requirements.capabilities = context.getCurrentVersionOverrideCapabilities();
for (let idx = 0; idx < controls.length; idx++) {
let control = controls[idx];
if (control.actionType !== constants_1.Constants.InputShowTaskpane && control.controlType !== constants_1.Constants.InputMenu) {
continue;
}
switch (control.controlType) {
case constants_1.Constants.InputButton:
case constants_1.Constants.InputMenuItem:
let runtimeRecord = this._createRuntimeRecord(context, control.action.sourceLocationResid, requirements, RuntimeSource.ShowTaskpane, manifestHostType);
this._addRuntimeRecord(runtimeRecord, runtimeRecords);
break;
case constants_1.Constants.InputMenu:
for (let menuIdx = 0; menuIdx < control.children.length; menuIdx++) {
let menuControl = control.children[menuIdx];
if (menuControl.actionType === constants_1.Constants.InputShowTaskpane) {
let runtimeRecord = this._createRuntimeRecord(context, menuControl.action.sourceLocationResid, requirements, RuntimeSource.ShowTaskpane, manifestHostType);
this._addRuntimeRecord(runtimeRecord, runtimeRecords);
}
}
break;
}
}
}
_createRuntimeRecord(context, resource, requirements, source, manifestHostType, scriptResId = null, lifetime = MOS.RuntimesLifetime.Short) {
let runtimeRecord = new RuntimeRecord();
runtimeRecord._resource = resource;
runtimeRecord._requirements = requirements;
runtimeRecord._source = source;
runtimeRecord._manifestHostType = manifestHostType;
runtimeRecord._localeResources = {};
runtimeRecord._lifetime = lifetime;
if (!utilities_1.Utilities.isNullOrUndefined(scriptResId)) {
runtimeRecord._scriptResId = scriptResId;
}
if (!utilities_1.Utilities.isNullOrUndefined(context)) {
runtimeRecord._versionOverridesNumber = context.getCurrentVersionOverrideNumber();
}
if (!utilities_1.Utilities.isNullOrUndefined(context) && !utilities_1.Utilities.isNullOrUndefined(context.getCurrentVersionOverrideCapabilities())) {
runtimeRecord._versionOverrideCapabilities = context.getCurrentVersionOverrideCapabilities();
}
return runtimeRecord;
}
_addRuntimeRecord(runtimeRecord, runtimeRecords) {
utilities_1.Utilities.log("Adding runtime record: " + runtimeRecord._resource);
runtimeRecords.push(runtimeRecord);
}
_populateRootRequirements() {
}
_populateLocaleSensitiveProperty(propertyGetter, mosPropertyName, maxLength) {
const defaultLocale = this._xmlManifest.getDefaultLocale();
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
if (seenLocale != defaultLocale) {
utilities_1.Utilities.log("handling %s for locale: %s", mosPropertyName, seenLocale);
let localizedPropertyValue = propertyGetter.apply(this._xmlManifest, [seenLocale]);
if (!utilities_1.Utilities.isNullOrUndefined(localizedPropertyValue)) {
let finalValue = localizedPropertyValue;
if (!utilities_1.Utilities.isNullOrUndefined(maxLength)) {
finalValue = utilities_1.Utilities.getLimitedString(localizedPropertyValue, maxLength, mosPropertyName + " truncated to %d characters in localized file " + seenLocale);
}
this._localeBuilder.addLocaleString(seenLocale, mosPropertyName, finalValue);
}
}
}
}
_populateValidDomains() {
const appDomains = this._xmlManifest.getAppDomains();
this._mosManifest.validDomains = [];
for (let domain of appDomains) {
if (!utilities_1.Utilities.isNullOrUndefined(domain)) {
this._mosManifest.validDomains.push(domain);
}
}
}
_populateStaticTabs() {
}
_populateComposeExtensions() {
}
_populateGraphConnector() {
}
_populateConfigurableTabs() {
}
_populateBots() {
}
_populateConnectors() {
}
_populateActivities() {
}
_populateMeetingExtensionDefinition() {
}
_populateSubscriptionOffer() {
}
_populateShowLoadingIndicator() {
}
_populateIsFullScreen() {
}
_populateConfigurableProperties() {
}
_populateDefaultBlockUntilAdminAction() {
}
_populatePublisherDocsUrl() {
}
_populateDefaultInstallScope() {
}
_populateDefaultGroupCapability() {
}
getOfficeAppManifest() {
return this._xmlManifest;
}
getJSON() {
return this._mosManifest.toJSON();
}
_getMailHostOverrides() {
let overrides = [];
for (let overrideVersion in this._xmlManifest._versionOverrides[constants_1.Constants.InputMailHost]) {
overrides.unshift(overrideVersion);
}
return overrides;
}
_doesHostHaveContentInManifest(manifestHostType) {
let hostType = Converter._getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType);
return !utilities_1.Utilities.isNullOrUndefined(this._xmlManifest._versionOverrides[hostType]);
}
_getResourceAndWriteLocalizedValues(resId, defaultValue, maxLength, versionOverridesNumber, resourceTemplate, resourceType, index1 = undefined, index2 = undefined, index3 = undefined, index4 = undefined, index5 = undefined, index6 = undefined) {
let resources = this._xmlManifest.getResources(versionOverridesNumber);
if (utilities_1.Utilities.isNullOrUndefined(resources)) {
return !utilities_1.Utilities.isNullOrUndefined(defaultValue) ? defaultValue : resId;
}
let allLocaleResources = resources[resourceType];
if (utilities_1.Utilities.isNullOrUndefined(allLocaleResources)) {
return !utilities_1.Utilities.isNullOrUndefined(defaultValue) ? defaultValue : resId;
}
const defaultLocale = this._xmlManifest.getDefaultLocale().toLocaleLowerCase();
if (utilities_1.Utilities.isNullOrUndefined(allLocaleResources[resId]) || utilities_1.Utilities.isNullOrUndefined(allLocaleResources[resId][defaultLocale])) {
return !utilities_1.Utilities.isNullOrUndefined(defaultValue) ? defaultValue : resId;
}
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
if (seenLocale !== defaultLocale && !utilities_1.Utilities.isNullOrUndefined(allLocaleResources[resId][seenLocale])) {
let formattedValue = Converter._formatResourceStringWithVariableNumberParameters(resourceTemplate, index1, index2, index3, index4, index5, index6);
if (resourceType === ResourceType.AllLocaleImages) {
const packageReference = this._iconBuilder.addIconAndGetReference(allLocaleResources[resId][seenLocale], !utilities_1.Utilities._writeImageUrls, false);
this._localeBuilder.addLocaleString(seenLocale, formattedValue, packageReference);
}
else {
this._localeBuilder.addLocaleString(seenLocale, formattedValue, allLocaleResources[resId][seenLocale]);
}
}
}
const valueObtained = utilities_1.Utilities.isNullOrUndefined(defaultValue) ? allLocaleResources[resId][defaultLocale] : defaultValue;
return (maxLength == constants_1.Constants.MaxResourceStringLengthAny) ? valueObtained : utilities_1.Utilities.truncateString(valueObtained, maxLength);
}
_addConstantResourceForAllSeenLocales(value, resourceTemplate, index1, index2, index3, index4, index5, index6) {
const defaultLocale = this._xmlManifest.getDefaultLocale().toLocaleLowerCase();
for (let seenLocale in this._xmlManifest.getLocalesSeen()) {
if (seenLocale !== defaultLocale) {
let formattedValue = Converter._formatResourceStringWithVariableNumberParameters(resourceTemplate, index1, index2, index3, index4, index5, index6);
this._localeBuilder.addLocaleString(seenLocale, formattedValue, value);
}
}
}
static _incrementCurrentRibbonIndex(context) {
if (context.getCurrentRibbonIndex() === conversionContext_1.ConversionContext.UnsetIndex) {
context.setCurrentRibbonIndex(0);
}
else {
context.setCurrentRibbonIndex(context.getCurrentRibbonIndex() + 1);
}
}
static _formatResourceStringWithVariableNumberParameters(resourceTemplate, index1 = undefined, index2 = undefined, index3 = undefined, index4 = undefined, index5 = undefined, index6 = undefined) {
if (utilities_1.Utilities.isNullOrUndefined(index1) || index1 === conversionContext_1.ConversionContext.UnsetIndex) {
return resourceTemplate;
}
else if (utilities_1.Utilities.isNullOrUndefined(index2) || index2 === conversionContext_1.ConversionContext.UnsetIndex) {
return util.format(resourceTemplate, index1);
}
else if (utilities_1.Utilities.isNullOrUndefined(index3) || index3 === conversionContext_1.ConversionContext.UnsetIndex) {
return util.format(resourceTemplate, index1, index2);
}
else if (utilities_1.Utilities.isNullOrUndefined(index4) || index4 === conversionContext_1.ConversionContext.UnsetIndex) {
return util.format(resourceTemplate, index1, index2, index3);
}
else if (utilities_1.Utilities.isNullOrUndefined(index5) || index5 === conversionContext_1.ConversionContext.UnsetIndex) {
return util.format(resourceTemplate, index1, index2, index3, index4);
}
else if (utilities_1.Utilities.isNullOrUndefined(index6) || index6 === conversionContext_1.ConversionContext.UnsetIndex) {
return util.format(resourceTemplate, index1, index2, index3, index4, index5);
}
else {
return util.format(resourceTemplate, index1, index2, index3, index4, index5, index6);
}
}
_addRuntimeExecuteAction(runtime, action, runtimeKey) {
utilities_1.Utilities.assert(action.type == MOS.ExtensionRuntimesActionsItemType.ExecuteFunction, "Expected an executeFunction type of action.");
const runtimeActionKey = Converter._generateExecuteActionKey(runtimeKey, action.id);
if (utilities_1.Utilities.isNullOrUndefined(this._addedExecuteFunctions[runtimeActionKey]) || !this._addedExecuteFunctions[runtimeActionKey]) {
runtime.actions.push(action);
this._addedExecuteFunctions[runtimeActionKey] = true;
utilities_1.Utilities.log("Added action %s for key: %s", action.id, runtimeActionKey);
}
else {
utilities_1.Utilities.log("Skipped adding action %s for key: %s because an identical one already exists.", action.id, runtimeActionKey);
}
}
static _getVersionOverrideHostTypeFromOsfManifestHostType(manifestHostType) {
switch (manifestHostType) {
case osfmos_1.OSF.ManifestHostType.Document:
return constants_1.Constants.InputDocument;
case osfmos_1.OSF.ManifestHostType.Workbook:
return constants_1.Constants.InputWorkbook;
case osfmos_1.OSF.ManifestHostType.Presentation:
return constants_1.Constants.InputPresentation;
case osfmos_1.OSF.ManifestHostType.Mailbox:
return constants_1.Constants.InputMailHost;
default:
throw "unsupported manifest host type: " + manifestHostType;
}
}
static _getCapabilityVersionFromNumericVersion(overrideText) {
switch (overrideText) {
case osfmos_1.OSF.VersionOverridesNumber.V1_0.toString():
return constants_1.Constants.MosV100;
case osfmos_1.OSF.VersionOverridesNumber.V1_1.toString():
return constants_1.Constants.MosV101;
default:
utilities_1.Utilities.logError("Unrecognized override version: " + overrideText);
return "";
}
}
static _getNumericOverrideVersionFromString(overrideText) {
switch (overrideText) {
case osfmos_1.OSF.VersionOverridesNumber.V1_0.toString():
return osfmos_1.OSF.VersionOverridesNumber.V1_0;
case osfmos_1.OSF.VersionOverridesNumber.V1_1.toString():
return osfmos_1.OSF.VersionOverridesNumber.V1_1;
default:
utilities_1.Utilities.logError("Unrecognized override version: " + overrideText);
return null;
}
}
static _getRequirementsScopeFromManifestHostType(manifestHostType) {
switch (manifestHostType) {
case osfmos_1.OSF.ManifestHostType.Mailbox:
return MOS.Scopes.Mail;
case osfmos_1.OSF.ManifestHostType.Workbook:
return MOS.Scopes.Workbook;
case osfmos_1.OSF.ManifestHostType.Document:
return MOS.Scopes.Document;
case osfmos_1.OSF.ManifestHostType.Presentation:
return MOS.Scopes.Presentation;
default:
utilities_1.Utilities.logError("Unsupported manifestHostType " + manifestHostType);
}
}
static _mosSendModeFromXmlSendMode(sendMode) {
switch (sendMode.toLowerCase()) {
case constants_1.Constants.InputSendModeBlock:
return MOS.OptionsSendMode.Block;
case constants_1.Constants.InputSendModePromptUser:
return MOS.OptionsSendMode.PromptUser;
case constants_1.Constants.InputSendModeSoftBlock:
return MOS.OptionsSendMode.SoftBlock;
default:
utilities_1.Utilities.logError("Unsupported sendMode: '%s'. Setting to null.", sendMode);
return null;
}
}
static _mosPermissionfromXmlPermission(permission, appType) {
if (appType === osfmos_1.OSF.OfficeAppType.ContentApp || appType === osfmos_1.OSF.OfficeAppType.TaskPaneApp) {
switch (permission) {
case osfmos_1.OSF.OsfControlPermission.Restricted:
return constants_1.Constants.DocumentRestrictedUser;
case osfmos_1.OSF.OsfControlPermission.ReadDocument:
return constants_1.Constants.DocumentReadUser;
case osfmos_1.OSF.OsfControlPermission.WriteDocument:
return constants_1.Constants.DocumentWriteUser;
case osfmos_1.OSF.OsfControlPermission.ReadAllDocument:
return constants_1.Constants.DocumentReadAllUser;
case osfmos_1.OSF.OsfControlPermission.ReadWriteDocument:
return constants_1.Constants.DocumentReadWriteUser;
default:
utilities_1.Utilities.logError("Unknown <Permission> found for ContentApp/TaskpaneApp: " + permission);
}
}
else if (appType === osfmos_1.OSF.OfficeAppType.MailApp) {
switch (permission) {
case osfmos_1.OSF.OsfControlPermission.Restricted:
return constants_1.Constants.MailboxItemRestrictedUser;
case osfmos_1.OSF.OsfControlPermission.ReadItem:
return constants_1.Constants.MailboxItemReadUser;
case osfmos_1.OSF.OsfControlPermission.ReadWriteItem:
return constants_1.Constants.MailboxItemReadWriteUser;
case osfmos_1.OSF.OsfControlPermission.ReadWriteMailbox:
return constants_1.Constants.MailboxReadWriteUser;
default:
utilities_1.Utilities.logError("Unknown <Permission> found for MailApp: " + permission);
}
}
}
static _setVersionOverrideNumberAndCapabilitiesInContext(context, xmlManifest, hostType, versionOverridesIndex) {
let capabilities = null;
let versionOverride = null;
let versionOverrideIndexNumeric = null;
if (Converter._isWXP(hostType)) {
versionOverride = xmlManifest._versionOverrides[hostType];
}
else {
versionOverride = xmlManifest._versionOverrides[hostType][versionOverridesIndex];
versionOverrideIndexNumeric = Converter._getNumericOverrideVersionFromString(versionOverridesIndex);
}
if (!utilities_1.Utilities.isNullOrUndefined(versionOverride) &&
!utilities_1.Utilities.isNullOrUndefined(versionOverride[constants_1.Constants.InputRequirements]) &&
!utilities_1.Utilities.isNullOrUndefined(versionOverride[constants_1.Constants.InputRequirements][constants_1.Constants.InputSets])) {
capabilities = Converter._getCapabilitiesFromLegacyRequirementSets(versionOverride[constants_1.Constants.InputRequirements][constants_1.Constants.InputSets]);
}
let capability = this._getImplicitCapabilityBasedOnVersionOverrideForHost(hostType, versionOverridesIndex);
if (!utilities_1.Utilities.isNullOrUndefined(capability)) {
if (utilities_1.Utilities.isNullOrUndefined(capabilities)) {
capabilities = [];
}
capabilities.push(capability);
}
let requirements = new MOS.RequirementsExtensionElement();
Converter._mergeInVersionOverrideRequirements(capabilities, requirements);
if (!utilities_1.Utilities.isNullOrUndefined(versionOverride)) {
context.setCurrentVersionOverrideAndCapabilities(versionOverrideIndexNumeric, requirements.capabilities);
}
}
static _clearVersionOverrideNumberAndCapabilitiesInContext(context) {
context.setCurrentVersionOverrideAndCapabilities(null, null);
}
static _legacyLaunchEventToMosEventType(legacyEventType) {
switch (legacyEventType) {
case "OnNewMessageCompose":
return "newMessageComposeCreated";
case "OnNewAppointmentOrganizer":
return "newAppointmentOrganizerCreated";
case "OnMessageAttachmentsChanged":
return "messageAttachmentsChanged";
case "OnAppointmentAttachmentsChanged":
return "appointmentAttachmentsChanged";
case "OnMessageRecipientsChanged":
return "messageRecipientsChanged";
case "OnAppointmentAttendeesChanged":
return "appointmentAttendeesChanged";
case "OnAppointmentTimeChanged":
return "appointmentTimeChanged";
case "OnAppointmentRecurrenceChanged":
return "appointmentRecurrenceChanged";
case "OnInfoBarDismissClicked":
return "infoBarDismissClicked";
case "OnMessageSend":
return "messageSending";
case "OnAppointmentSend":
return "appointmentSending";
case "OnOpenDocument":
return "documentOpen";
case "OnMessageCompose":
return "messageComposeOpened";
case "OnAppointmentOrganizer":
return "appointmentOrganizerOpened";
default:
utilities_1.Utilities.logError("Unrecognized autorun even type: " + legacyEventType);
}
return legacyEventType;
}
static _generateExecuteActionKey(runtimeKey, actionId) {
return runtimeKey + actionId;
}
static _generateRuntimeLookupKey(url, lifetime, capabilities) {
let resultKey = url + lifetime.toString();
if (!utilities_1.Utilities.isNullOrUndefined(capabilities)) {
Converter._sortCapabilitiesAlphabatically(capabilities);
for (let capability of capabilities) {
resultKey = resultKey + (capability.name + capability.minVersion);
}
}
return resultKey;
}
static _sortCapabilitiesAlphabatically(capabilities) {
if (!utilities_1.Utilities.isNullOrUndefined(capabilities)) {
capabilities.sort(function (c1, c2) {
if (c1.name < c2.name) {
return -1;
}
if (c1.name > c2.name) {
return 1;
}
return 0;
});
}
}
static _getImplicitCapabilityBasedOnVersionOverrideForHost(hostType, versionOverridesIndex) {
let capability = null;
if (hostType === constants_1.Constants.InputMailHost) {
if (versionOverridesIndex === osfmos_1.OSF.VersionOverridesNumber.V1_0.toString()) {
capability = new MOS.Capabilities();
capability.name = constants_1.Constants.InputMailBoxCapability;
capability.minVersion = "1.3";
}
else if (versionOverridesIndex === osfmos_1.OSF.VersionOverridesNumber.V1_1.toString()) {
capability = new MOS.Capabilities();
capability.name = constants_1.Constants.InputMailBoxCapability;
capability.minVersion = "1.5";
}
}
else if (Converter._isWXP(hostType)) {
if (versionOverridesIndex === osfmos_1.OSF.VersionOverridesNumber.V1_0.toString()) {
capability = new MOS.Capabilities();
capability.name = constants_1.Constants.InputAddinCommandCapability;
capability.minVersion = "1.1";
}
}
else {
utilities_1.Utilities.logError("Skipping adding VersionOverride capability for the host as unsupported host type: %s", hostType);
}
return capability;
}
static _isWXP(hostType) {
return (hostType === constants_1.Constants.InputDocument ||
hostType === constants_1.Constants.InputPresentation ||
hostType === constants_1.Constants.InputWorkbook);
}
static _getMailHostVersionOVerrides() {
let versionOverrides = [];
const values = Object.values(osfmos_1.OSF.VersionOverridesNumber);
values.slice().reverse().forEach(value => {
if (!isNaN(Number(value)) && Number(value) !== osfmos_1.OSF.VersionOverridesNumber.Max) {
versionOverrides.push(value.toString());
}
});
return versionOverrides;
}
}
exports.Converter = Converter;
//# sourceMappingURL=converter.js.map