@forge/cli
13.3.0-next.20-experimental-cf2ad4c13.3.0-next.12-experimental-4b981ef-experimental-5b8eb3c
out/module-add/manifest-merger.js~
out/module-add/manifest-merger.jsModified+18−39
Index: package/out/module-add/manifest-merger.js
===================================================================
--- package/out/module-add/manifest-merger.js
+++ package/out/module-add/manifest-merger.js
@@ -8,10 +8,9 @@
const path_1 = tslib_1.__importDefault(require("path"));
const yaml_1 = tslib_1.__importStar(require("yaml"));
const diff_1 = require("diff");
const cli_shared_1 = require("@forge/cli-shared");
-const COMPATIBILITY_PRODUCTS = new Set(['jira', 'confluence']);
-const GLOBAL_COMPATIBILITY_PRODUCTS = ['jira', 'confluence'];
+const COMPATIBILITY_PRODUCTS = new Set(['jira', 'confluence', 'compass']);
const ROOT_SECTION_ORDER = ['modules', 'resources', 'permissions', 'app'];
const RESOURCE_FIELD_ORDER = ['key', 'path', 'entry'];
const ROOT_INSERT_OPTIONS = { orderedKeys: ROOT_SECTION_ORDER };
const MODULE_INSERT_OPTIONS = { appendBeforeKey: 'function' };
@@ -272,55 +271,35 @@
return value !== null && typeof value === 'object' && !Array.isArray(value);
}
function applyCrossProductCompatibility(existingManifest, manifestFragment, template, warnings) {
const newProduct = template.product;
+ if (!newProduct || !COMPATIBILITY_PRODUCTS.has(newProduct))
+ return;
const existingProducts = collectProductPrefixes(existingManifest.modules);
+ existingProducts.delete(newProduct);
+ const compatProducts = [...existingProducts].filter((p) => COMPATIBILITY_PRODUCTS.has(p));
+ if (compatProducts.length === 0)
+ return;
const existingApp = isObject(existingManifest.app) ? existingManifest.app : undefined;
const existingCompatibility = existingApp && isObject(existingApp.compatibility) ? existingApp.compatibility : {};
const fragmentApp = isObject(manifestFragment.app) ? manifestFragment.app : {};
const fragmentCompatibility = isObject(fragmentApp.compatibility) ? fragmentApp.compatibility : {};
+ const hasRequiredContext = Object.values(existingCompatibility).some((value) => isObject(value) && value.required === true);
const nextCompatibility = { ...fragmentCompatibility };
- const entriesToAdd = [];
- let warningMessage;
- if (newProduct === 'global') {
- const requiredProduct = existingProducts.has('jira') || !existingProducts.has('confluence') ? 'jira' : 'confluence';
- for (const product of GLOBAL_COMPATIBILITY_PRODUCTS) {
- if (isObject(existingCompatibility[product]) || isObject(nextCompatibility[product])) {
- continue;
- }
- entriesToAdd.push({ product, required: product === requiredProduct });
- }
- warningMessage = cli_shared_1.Text.module.add.warnAddedGlobalAppCompatibility(requiredProduct);
+ let primaryAssigned = hasRequiredContext;
+ for (const existingProduct of compatProducts) {
+ if (isObject(existingCompatibility[existingProduct]) || isObject(nextCompatibility[existingProduct]))
+ continue;
+ nextCompatibility[existingProduct] = { required: !primaryAssigned };
+ primaryAssigned = true;
}
- else {
- if (!newProduct || !COMPATIBILITY_PRODUCTS.has(newProduct))
- return;
- existingProducts.delete(newProduct);
- const compatProducts = [...existingProducts].filter((product) => COMPATIBILITY_PRODUCTS.has(product));
- if (compatProducts.length === 0)
- return;
- const hasRequiredContext = Object.values(existingCompatibility).some((value) => isObject(value) && value.required === true);
- let primaryAssigned = hasRequiredContext;
- for (const existingProduct of compatProducts) {
- if (isObject(existingCompatibility[existingProduct]) || isObject(nextCompatibility[existingProduct])) {
- continue;
- }
- entriesToAdd.push({ product: existingProduct, required: !primaryAssigned });
- primaryAssigned = true;
- }
- if (!isObject(existingCompatibility[newProduct]) && !isObject(nextCompatibility[newProduct])) {
- entriesToAdd.push({ product: newProduct, required: false });
- }
- warningMessage = cli_shared_1.Text.module.add.warnAddedAppCompatibility(compatProducts, newProduct);
+ if (!isObject(existingCompatibility[newProduct]) && !isObject(nextCompatibility[newProduct])) {
+ nextCompatibility[newProduct] = { required: false };
}
- if (entriesToAdd.length === 0 || !warningMessage) {
+ if (Object.keys(nextCompatibility).length === Object.keys(fragmentCompatibility).length)
return;
- }
- for (const { product, required } of entriesToAdd) {
- nextCompatibility[product] = { required };
- }
manifestFragment.app = { ...fragmentApp, compatibility: nextCompatibility };
- warnings.push(warningMessage);
+ warnings.push(cli_shared_1.Text.module.add.warnAddedAppCompatibility(compatProducts, newProduct));
}
function collectProductPrefixes(modules) {
const prefixes = new Set();
if (!isObject(modules))