"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 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 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 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 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